请教两个页面如何共享一个WebSocket连接
发布于 7 年前 作者 jiaylsir 18843 次浏览 最后一次编辑是 6 年前 来自 问答

比如,我利用websocket建立了一个聊天室,这个聊天室有两个页面,假如对面发送的消息是1,我在第一个页面接收,假如对面发送的消息是2,我在第二个页面接受,请问这个如何实现?我想不出办法来了。。。。求助,呜呜!

8 回复

不知道为什么这样实现。但是两个页面都接收不就好了。只是交互上判断消息是1或者2显示出来而已。 又或者两个页面监听不同的namespace,后端根据是1还是2分别发送到对应的namespace。

首先2个人都必须是一个topic id,也就是你所说的聊天室的唯一id。然后websocket通信的channel就通过它来识别。简单的先看faye,然后看socket.io

像本站的未读消息就可以用faye做。虽然它们用了jpush…鄙视一下,哈哈

图方便的话,就在emit时加上页面标识来区分?

严格说,“两个页面共享一个WebSocket连接” 是做不到的。

需求挺奇怪的,多个client 在链接时,传递相同的标识,可以在服务端理解为同一个用户,或同一类用户,比如users:user1 users:user2,然后针对用户组分发消息。尽量不要从客户端去判断消息对象。

哪个客户端接收什么消息这个可以在服务端控制,不用非得要用一个socket链接 并且这个目前也不能这样

可以采用 localStorage 来做,浏览器 localStorage 发生变化时会触发 storage 事件。一个页面建立连接接收消息,将不属于自己消息写到 localStorage 中,在另一个页面中监听 storage 事件然后读取新消息,大概是这样的~

很简单,每一个客户端页面都有一个socket id,服务端存储每一个socket id 以及对应的用户信息,只要判断这两个页面所属的用户是否一致,比如cookie,这样就可以模拟成两个页面同步了,当然 楼主按照原意的话,问题是没法解决的。

回到顶部