zoukankan      html  css  js  c++  java
  • Java websocket+ nginx+redis负载均衡上实现单对单通讯

    参考:https://www.jianshu.com/p/e25f7a48534d

    由于公司项目需要用到websocket进行通讯,服务器采用负载均衡模式。由于WebSocketSession对象无法实例化的问题,导致无法使用Redis进行存储。如果一个用户连接进01主机,一个用户连接02主机,那么他们之间就无法实现单对单通讯,因为数据都保存在不同的Session域中。

           思路(图片来自Java-websocket开发交流2群):

     

     
     
     
     
     
     
     
     

    1. 依照图中思路,实现不同主机登录的用户也能通讯。至于怎么实现握手的,百度一堆,这里就不讲了。

    保存用户的session到集合中,并且把用户登录的服务器IP保存到Redis中。

     
     

    直接上代码

    1. 先建一个UserSocket类,实现序列化接口

     
     

    2. 当用户握手成功时保存用户ID和本机IP到Redis并且用户的ID和WebSocketSession保存到全局变量中

     
     
     
     

    3.  Redis存储

    新建一个RedisDao类

     
     

    在spring-mybatis.xml中配置

     
     

    在RedisDao类中中创建函数存取对象到Redis中

     
     
     
     

    新建一个序列化对象的类,

     
     
     
     

    4. 通过接口统一发送到指定用户

     判断接收信息的用户是否在本IP中,如果不在同一个IP,转发给用户所在的IP接口处理

     
     
     
     
     
     

    5.Java post数据实现 (注意编码)

     
     
     
     

    以上即可以实现不同主机中的用户相互通讯

    由于该方法虽然能实现不同主机中的用户单对单聊天,但也有存在bug未处理。如果有更好的方式请通知我哈,一起交流交流。



    作者:No刹那光辉
    链接:https://www.jianshu.com/p/e25f7a48534d
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    欧拉函数
    uva10870 矩阵
    poj3233 矩阵等比数列求和 二分
    hdu4990 矩阵
    hdu4549 矩阵快速幂 + 欧拉降幂
    补矩阵的题目
    CodeForces 450B 矩阵
    hoj2662 状态压缩dp
    poj3254 状态压缩dp
    zoj2770 差分约束系统
  • 原文地址:https://www.cnblogs.com/jiawen010/p/14004168.html
Copyright © 2011-2022 走看看