• 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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Windows下输入法全角符,半角符的切换
    hdu 2546 饭卡
    hdu 1712 ACboy needs your help
    hdu 3033 I love sneakers!
    hdu 1171 Big Event in HDU
    hdu 1114 Piggy-Bank
    HDU 1058 Humble Numbers
    hdu 1297
    hdu 2050
    hdu 2563
  • 原文地址:https://www.cnblogs.com/jiawen010/p/14004168.html
Copyright © 2020-2023  润新知