Spring java websocket 爬坑记

本文所涉及到都是我所遇到《扫码登录》的问题

1.webSocket session 共享;

2.webSocket断开补偿机制;

 所涉及到的环境是

maven ,sockjs(使用解决不支持websocket问题,使用最新版本1.0.4,0.3版本是不允许带请求参数 ),spring4.0+,tomcat7.0,redis,jdk7


问题的1: 产生于多Server 问题,PC端 和手机端访问的不是一个服务端(server),导致手机端登录验证成功无法推送给PC端,spring webSocket 无法实现 序列化 ,session共享

解决方案(使用redis 发布/订阅 解决该问题,也可以使用大型的MQ来解决该问题)

1.pc 使用sockjs(websocket) 与Server1 建立连接(需要nginx设置session一致)

2.当手机扫描pc断的二维码时(二维码是一个http地址访问需要验证用户的一些信息),这样手机端可能把信息发送到Server2

3.Server2发布到相应主题中(topic:qrCode)

4.Serve1~3 订阅该消息,server1 发现该帐号是在本机,顾推送成功消息,S2~S3发现连接不再该机器上,顾抛弃该消息

问题2: 在互联网中难免会有网络不稳定的情况,导致手机端扫码成功,但是PC段没有收到请求

1,在以上第3步,同时产生一条缓存信息,记录登录成功

2,在websocket 加入心跳机制,在每次心跳请求中判断是否登录成功(redis)可以参考

https://blog.csdn.net/qq_36290329/article/details/52724396


以上是我遇到的问题,和相应的解决方案,供大家参考,谢谢。希望对大家有所帮助。




猜你喜欢

转载自blog.csdn.net/xiaoxiaosu_37/article/details/80172031