不需要消息服务器的消息队列,websocketcluster: webSocket集群功能简单实现 在tomcat集群环境下,客户端只能与一个tomcat建立websocket连接,如果服务器向客户端...

simplewebsocket

webSocket集群功能简单实现

在tomcat集群环境下,客户端只能与一个tomcat建立websocket连接,如果服务器向客户端发消息,则不知道哪个tomcat与此客户端建立的连接.

如果是http的会话信息可以通过缓存共享(如用Redis存会话信息), 但是webSocket的连接是不可以序列化的,也就没法共享.

所以解决问题的思路是:

当一个客户端与tomcat建立websocket连接, 则把此连接信息与相应的sessionid或用户id形成键值对放在本机内存的map中.

在集群环境下还要引入消息队列的概念, 可以用订阅/发布的模式,可以采用自己熟悉的消息框架, 此项目中采用了hazelcast的消息队列(简单,不需要额外启服务), tomcat启动时自动启动消息监听(代码中已实现), 当服务端向某个客户端通信时, 先在集群的tomcat上发布消息, 此消息包含sessionid及向客户通信的内容, 当订阅了消息的tomcat收到消息后, 检查本机的map中是否包含此sessionid, 如果不包含则忽略,如果包含则取出此sessionid对应的连接,然后向客户端发送相应内容进行交互.

项目使用

1.先将webSocket-hazelcast.xml放到自己项目的WEB-INF下.

2.在web.xml中注册监听事件com.tw.listener.WebSocketListener

3.启动tomcat

webSocket-hazelcast.xml说明

此配置文件主要配置消息要广播或发送到指定IP的服务器地址列表.参考其中的解释修改IP即可

注意:

需要Tomcat8以上,因为websocket需要使用到websocket-api.jar的包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值