1
monstervivi 2022-07-31 08:44:24 +08:00 via iPhone
使用缓存,key = uniqueId (保证每个用户对应一个如用户 ID), value = 连接。
|
2
BBCCBB 2022-07-31 08:45:11 +08:00
后端来控制, 根据 uid/唯一标识关掉之前的 /限制新连接创建
|
3
monstervivi 2022-07-31 08:46:44 +08:00 via iPhone
@monstervivi 这里说的是后端建立 ws 连接的逻辑
|
4
li746224 2022-07-31 08:57:01 +08:00 via iPhone
浏览器指纹
|
5
zhuweiyou 2022-07-31 09:17:23 +08:00
应该解决 "后端说最大连接数有限制" 这个问题, 不然用户多了不一样挂?
|
6
C603H6r18Q1mSP9N 2022-07-31 09:18:23 +08:00
我们是页面隐藏 ws 关、显示 ws 重连,简单好用
|
7
wobuhuicode 2022-07-31 09:33:13 +08:00
最简单的的做法就是前端 cookies 带个 ID 就好了
|
8
firhome OP @BBCCBB 这样会有问题吧。 那样 新窗口的页面连接了。 旧的页面 就不连了? 那用户关闭新窗口 旧的通知就无法触达了
|
9
firhome OP @shanghai1998 能具体说说吗? 也是通过我说的那个 BroadcastChannel 来实现的吧
|
10
westoy 2022-07-31 10:30:22 +08:00
简单粗暴点好, 直接随机一个泛解析的二级域名
|
11
oott123 2022-07-31 10:33:06 +08:00
你自己都说 BroadcastChannel 了,这方案应该是对后端和对用户来说体验都最好的,只看你乐不乐意写一吨代码来换这个最好了。
|
12
learningman 2022-07-31 11:07:39 +08:00 via Android
能不能用这个
https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event 把不可见的窗口的连接关掉,一般来说用户最顶层只有一个窗口,也就变相实现了 |
13
huangzhiyia 2022-07-31 11:40:35 +08:00
激活页面保持 ws 连接,非激活页面暂停或者断开 ws 连接。在前端抽象出一层消息处理 API ,比如 ws 收到消息往 localstorage 写消息,其他页面定时( 1s )从 localstorage 取消息。
|
14
iseki 2022-07-31 11:47:18 +08:00 via Android
开个 SharedWorker 行不行
|
15
wgjtyu 2022-07-31 11:49:08 +08:00
如果说的多开是指一个浏览器的多个 tab ,可以试试 SharedWorker 。https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker
|
17
kongkx 2022-07-31 13:09:41 +08:00 via iPhone
worker 或者 broadcast channel 甚至 localstorage 都可以试试。 反正都是解决 tab 之间的通讯,然后管理连接的问题
|