Websocket Session共享解析(方案1 ) Websocket Session不能直接序列化存储,而且用户请求时开始创建与群集中的a节点的链接,将该Session带到b节点后再保存用户
因此,为了使Session看起来像是共享的,我的解决方案采用了触发web套接字反向推送的订阅式队列。 想法如下图所示。
Websocket Session共享 思路图解释:模块1 :此处不做任何说明。 因为每个用户只创建一个Session,所以当用户再次链接到第二个节点时,第一个节点上的Session将关闭并销毁。 每个节点使用“静态”(static )成员变量映射当前节点的所有web套接字会话)。
模块2 )因为每个节点存储每个节点的所有Websocket Session,所以只需要确定当前节点上是否存在当前用户的Websocket Session,如果存在,则反转消息即可。
模块3 )如果有消息需要通过Websocket推送至相应的用户,但不知道该用户位于哪个节点,请通过任务调度模块将消息放入MQ中订阅然后推送。
Websocket Session共享解析(方案2 )实际共享的是在群集环境中通过轮询请求(例如HA/Nginx )来减轻节点压力,如果用户可能被分配到多个节点,则可以共享散列(例如IP ) 解析用户只分配给一个节点,Session共享不存在。 这样的中间件有很多。 正如我们的“伞神”提出的那样,只要采用蚂蚁“模块二”就可以解决。 还有很多其他的。