![]() | 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 MoozLee 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 之间的通讯,然后管理连接的问题 |