
im
非ban必选
黑,真他妈的黑
展开
-
IM集群nginx配置
如果要使用多节点做水平扩展的话,需要保证一个客户端只跟具体的某台SocketIO服务器维持连接,否则的话,在WebSocket协议握手阶段,会因为握手失败而无法正常建立连接。在upstream块里面,多了一个ip_hash的配置,这个配置可以使得nginx根据客户端的ip来做负载均衡,最终的效果是某一个ip的客户端只会被路由到某一台服务器上面。原创 2024-12-24 14:56:43 · 213 阅读 · 0 评论 -
springboot、springcloudnacos、netty-socketio实现im集群弹性伸缩和节点上下线监听
1、im-server 所有节点都注册到nacos服务中,使用nacos服务端2.4.3,客户端1.4.6。2、im-listener 监听 im-server的上线和下线事件。原创 2024-12-23 13:57:00 · 182 阅读 · 0 评论 -
netty-socket.io群聊(Room) 消息确认机制
1、pom文件2、设定三个客户端,即三个用户 userName分别是 97 ,98 ,99客户端连接到服务器后都加入房间room1,服务端代码如下。3、服务端发送群聊消息如下BroadcastAckCallback 类是房间内客户端收到消息后发送确认回调函数接收数据的类,其构造函数,第一个参数是接收到客户端的回调函数发送的数据类型,第二个参数是接收超时时间,单位是秒。需要重写 BroadcastAckCallback的onClientTimeout、onClientSuccess和onAl原创 2022-06-02 10:35:55 · 1233 阅读 · 0 评论 -
IM多客户端
1、场景描述:业务系统中对于用户信息都有一个唯一标识userId,当我们在业务系统中实现单聊、群聊或者消息推送的时候,同一个用户会有多个客户端登录,例如我们分别用谷歌、360和火狐打开业务系统,此时同一用户登录,打开了三个socket连接,socket.io是使用sessionId来区分客户端的。此时如果要想谷歌、360和火狐浏览器都要接收到服务器推送的消息,就要把userId和sessionId进行绑定,也就是说同一个userId会对应多个sessionId。2、代码实现pom文件客户端连接成功、客原创 2022-06-01 13:39:41 · 232 阅读 · 0 评论 -
Nginx配置HTTPS访问socket.io server
1、服务器域名: xxx.yyy.comIM服务器端口:pppp项目中有个聊天功能,之前一直请求的 http://xxx.yyy.com:pppp的格式,但是升级https之后,就报错了(https请求http服务器路径报错)nginx的ssl配置略过,可查看之前的博客下面是 socket.io server 的访问配置 location ^~/socket.io/ { proxy_pass http://xxx.yyy.com:pppp..原创 2022-05-27 10:28:18 · 1538 阅读 · 0 评论 -
netty-socket.io之ack超时设置
1、socket.io服务端和客户端的版本对应Client Installation | Socket.IO2、java版本的netty-socketio只支持socket.io的客户端2.X版本 <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-s原创 2022-05-26 11:52:05 · 1188 阅读 · 0 评论 -
netty-socketio之ack消息
1、客户端给服务端发送带有ack请求的消息,服务端收到消息后发送ack响应消息给客户端 var userName = 'user' + Math.floor((Math.random()*1000)+1); function sendMessage() { var message = $('#msg').val(); $('#msg').val(''); var jsonObject = {userName:原创 2022-05-19 15:14:10 · 1628 阅读 · 0 评论 -
socketio客户端api
1、Client options | Socket.IOconst socket = io("https://example.com"); // the main namespaceconst productSocket = io("https://example.com/product", { forceNew: true }); // the "product" namespaceconst orderSocket = io("https://example.com/order", { f原创 2022-05-19 11:42:50 · 458 阅读 · 0 评论 -
IM服务器检测客户端心跳
心跳间隔 60秒,5次未接收到心跳,默认为离线。接收到心跳后,缓存当前时间到redis,并设置过期时间 5*60+5秒,当服务器5次未接收到心跳后,过五秒,redis中key过期,通过监听redis的key过期事件,获取客户端相关信息,把客户端设置为离线...原创 2022-04-25 13:07:06 · 1077 阅读 · 0 评论 -
protobuf插件安装使用
1、2、java实体类生成 proto文件进入到实体类,右键然后粘贴即可3、proto生成java类的插件proto数据类型映射pom文件 <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java --> <dependency> <groupId>com.googl...原创 2022-04-19 12:32:12 · 1136 阅读 · 0 评论 -
Socket.io.js刷新页面断开重连
var userId = 351; var userName = '351'; var socket = io('http://192.168.5.202:39090?userId='+userId+'&clientType=APP&userName='+userName,{ 'reconnect': true,'forceNew':true,'timeout':10000,'reconnectionDelay':1000,'reconnectionAttem...原创 2021-10-28 10:48:11 · 1473 阅读 · 0 评论 -
Socket.IO.js客户端连接异常时的内置事件流程
参考Soket.IO官方文档:https://socket.io/docs/client-api/,客户端内置事件一共有10种,事件如下:socket.on('connect', function(data){ //连接正常的事件 console.log(JSON.stringify(data) + ' - connect');});socket.on('connect_...原创 2018-10-20 12:03:58 · 3022 阅读 · 0 评论 -
socket.io实践篇之socket时间太久会断开
谈到socket.io,就不能不提一下websocket,websocket是html5的新特性之一,多少web开发者为之兴奋,websocket可以使web程序客户端和服务端之间保持长连接,可以实现实时通讯,而且API简单易用,但是由于浏览器的支持不同,又是一个头疼的事情。后来,socket.io出现了,在某种程度上,socket.io就是websocket,其实socket.io与websoc...原创 2018-10-20 00:07:57 · 15842 阅读 · 1 评论 -
关于socket.io的监听事件接收多次的问题解决
1、场景描述:使用socket.io在初始化socket引用socket.io.js<script src="/start/plugins/winvoice/socket.io-1.3.7.js"></script>初始化socketvar seatsocket = io('http://127.0.0.1:10001/client');...原创 2018-10-18 11:24:19 · 11909 阅读 · 0 评论 -
socket.io客户端java
<dependency> <groupId>io.socket</groupId> <artifactId>socket.io-client</artifactId> <version>1.0.0</version> </dependency>package com.pojo.s...原创 2021-08-05 17:38:30 · 1289 阅读 · 1 评论 -
springboot集成SocketIO实时通信
概述基于 socket.io 来说,采用 node 实现更加合适,本文使用两个后端的Java开源框架实现。服务端使用netty-socketio 客户端使用socket.io-client-java业务需求是将之前通过轮询方式调动RESTFul API改成使用WebSocket长连接方式,实现要服务器实时的推送消息,另外还要实时监控POS机的在线状态等。引入依赖&l...原创 2018-10-20 13:49:00 · 28288 阅读 · 2 评论 -
create a cluster of netty socketio servers for broadcasting messages
// Instantiate Redisson configurationConfig redissonConfig = new Config();redissonConfig.useSingleServer().setAddress("127.0.0.1:6379");// Instantiate Redisson connectionRedissonClient redisson ...原创 2018-11-07 14:11:45 · 538 阅读 · 0 评论 -
netty-socketio解决跨域问题
1、pom <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.18</version> </dependency>2、p原创 2021-04-30 14:35:31 · 1705 阅读 · 0 评论 -
Akka路由使用
1、pom文件 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <akka.version>2.6.13</akka.version> </properties> <dependencies> <dependency>原创 2021-04-28 20:53:04 · 171 阅读 · 0 评论 -
netty+protobuf+websocket实现在线聊天js客户端实现
1、server服务端实现https://blog.youkuaiyun.com/zsj777/article/details/1159762232、js代码生成https://blog.youkuaiyun.com/zsj777/article/details/1160602623、客户端代码index.html<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit...原创 2021-04-23 16:49:50 · 392 阅读 · 0 评论 -
proto文件生成js
1、安装nodejs和protobuf2、im.proto 文件内容如下syntax ="proto3"; //optimize_for 加快解析的速度option optimize_for = SPEED;option java_package = "sample.cluster.nettyim";option java_outer_classname="MessageData";//包路径package sample.cluster.nettyim;option java_原创 2021-04-23 16:19:01 · 2016 阅读 · 0 评论 -
netty+protobuf+websocket实现在线聊天
定义proto结构im.protosyntax ="proto3"; //optimize_for 加快解析的速度option optimize_for = SPEED;option java_package = "sample.cluster.nettyim";option java_outer_classname="MessageData";option java_multiple_files = true; // 客户端发送过来的消息实体message RequestU原创 2021-04-21 20:20:31 · 491 阅读 · 0 评论 -
java作为客户端连接socket.io-server
1、pom文件 <dependency> <groupId>io.socket</groupId> <artifactId>socket.io-client</artifactId> <version>2.0.0</version> </dependency>2、连接websocket服务端pa原创 2021-04-21 12:37:37 · 1456 阅读 · 0 评论 -
Akka使用ProtoBuf序列化
1、根据proto文件生成java代码,具体操作见之前的netty博客https://blog.youkuaiyun.com/zsj777/article/details/102685200生成的java类如下// Generated by the protocol buffer compiler. DO NOT EDIT!// source: cmd.protopackage sample.cluster.simple;public final class MessageGoogle {原创 2021-04-20 22:22:46 · 356 阅读 · 0 评论 -
Akka 消息JSON序列化
1、pom添加json序列化依赖 <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-serialization-jackson_2.13</artifactId> <version>2.6.13</version> </depend原创 2021-04-20 20:30:20 · 403 阅读 · 0 评论 -
Akka使用netty网络通讯
1、如果在配置文件中是否启用artery,actor的地址会有不同,关闭artery时一定要指定协议为akk.tcp!比如在配置文件中定义种子节点时:artery.enabled = onseed-nodes = [ "akka://ClusterSystem@127.0.0.1:25251", "akka://ClusterSystem@127.0.0.1:25252"]artery.enabled = offseed-nodes = [ "akka.tcp://Simple原创 2021-04-20 19:49:13 · 828 阅读 · 0 评论 -
Akka集群中的分布式发布订阅
1、pom文件<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <akka.version>2.6.13</akka.version> </properties> <dependencies> <dependency> <groupId>co原创 2021-04-20 17:28:12 · 175 阅读 · 0 评论 -
使用Akka创建集群
1、一直有一个想法,想做一个IM集群,最近有个思路通过nacos注册中心实现IM集群节点的服务注册和服务发现,然后用Akka做集群之间的各节点通讯,通过服务注册和服务发现,实现Akka集群种子节点的加入。2、Akka集群概念节点(node):集群中的逻辑成员。允许一台物理机上有多个节点。由元组hostname:port:uid唯一确定。集群(cluster):由成员关系服务构建的一组节点。领导(leader):集群中唯一扮演领导角色的节点。种子节点(seed node):作为其他节点加入原创 2021-04-19 17:57:06 · 481 阅读 · 0 评论 -
springboot集成netty-socketio集群实现
1、实现思路IM每个节点定义唯一标识A,A = 机器码加im端口号。当客户端连接到IM节点后,把客户端的用户唯一标识ID和连接的IM服务端的唯一标识A进行绑定。当两个用户相互发送消息时,判断接收用户是否在线,在线,则获取接收消息用户的socketclient,若获取不到,则根据接收用户ID获取接收用户所在节点的唯一标识。然后通过redis的订阅发布,发送消息到接收用户所在的节点。每个节点只订阅和该节点唯一标识相同的topic。2、代码pom <dependencies&g原创 2021-04-11 18:24:23 · 1563 阅读 · 0 评论 -
netty-socketio实现im群聊
1、pom <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.18</version> </dependency> <dep原创 2021-04-11 00:32:58 · 403 阅读 · 0 评论 -
netty-socketio实现im
1、pom文件加入 <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.18</version> </dependency>原创 2021-04-10 23:46:32 · 314 阅读 · 0 评论