最近在做扫码登录,这个功能在展示二维码以后,会与其中一个认证服务的实例建立长连接,实时反馈二维码状态变更。
在单实例情况下,这很好实现,但是多实例的话,状态变化时,就需要通知到对应实例。但是如何通知是一个问题。
V 友们,各位大佬们,有什么好的方案去解决这个问题吗?
1
opengps 3 天前
不需要解决,本身就是得支持多个长连接
|
2
esee 3 天前 1
非得长连接?轮询不行么?
|
3
spritecn 3 天前
这个网关的会话保持就解决了吧
|
4
fcten 3 天前
长连接接入需要一个 session 服务维护每个会话对应的连接
扫码登录轮询就行了 |
7
vZexc0m 3 天前
轮询不会比长连接消耗大
|
8
jingrui 3 天前
前端轮训,简单高效,登录并发也不会太高
|
9
cat 3 天前
连微信官网的扫码登录都是轮询…… https://mp.weixin.qq.com/ 折腾长连接干啥呀
|
10
cccssss 3 天前
redis publish ?消息队列广播?
|
11
onceMore 3 天前 via Android
直接轮询,方案越简单,可靠性越高
|
12
ZeekChatCom 3 天前
生成个 id 啊
|
13
shadowyue 3 天前
轮询还是长链接要看你业务的契合度。
至少前几年,我专门研究了下,淘宝的扫码登录就是轮询,微信的就是长链接。 非常契合这两家的业务基础。淘宝就是查询多,微信作为聊天软件就是擅长维持长链接。 |
14
hellomsg 3 天前
一两秒一个轮询对用户来说也不是不可以,用户体验没差别
|
15
allecnm 3 天前
微信支付宝都是轮询
|
16
sujin190 3 天前
其实这种还是使用 long polling 轮询实现更简单快捷,搞个异步 IO 的框架,挂起实现不要太简单
|
17
hellomsg 3 天前
不说你业务的实现方式,只说你关心的点,我猜是在分布式环境中,客户端之间如何通信?就是消息路由。要么广播;要么有个中心负责转发给客户端所在的服务器,再下发给客户端。中心可以是消息队列。
|
18
hellomsg 3 天前
简单轮询的方式,就是查数据库,数据库就是中心,主动去取。
|
20
spicy777 3 天前
之前做的扫码登录都是用的轮询
|
21
xuanbg 3 天前
轮询啊,http 哪怕是长链接(事实上默认都是长链接)你也是无法反向推送消息的。
|
22
EscYezi 3 天前 via Android 1
前端轮询是最简单的,后端任意节点状态更新到 redis ,接口直接查询 redis 数据返回,最多加个 db 查询兜底。
如果一定要长连接,也有简化方案,前端到接口用 websocket/sse ,接口实际还是轮询 redis 并返回,这样即使重新连接到不同节点也无所谓,一定程度算是无状态的。 更加麻烦的方案: - 多个 websocket 节点,mq 广播结果(引入额外依赖和故障点 mq) - 中心化维护用户与节点的连接信息,这样可以直接通知到对应节点(引入中心化信息更新问题) - websocket 节点直接互相连接,对于不是自己的消息用 rpc 或者 websocket 或者 http 转发到其他节点(复杂度最高) 这 5 个方案前 4 个都有用过,最后发现 1 方案反而是最好的,实现简单,无状态易扩展,故障点少。2 3 也比较可靠,增加些复杂度。4 踩过坑之后不准备用了。 |