CNode

请教两个页面如何共享一个WebSocket连接

问答
Jjiaylsir发布于11 年前最后回复11 年前8 回复21852 浏览0 收藏

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

查看回复

回复 (8)

A
airyland#1·11 年前

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

I
i5ting#2·11 年前

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

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

D
DavidCai1993#3·11 年前

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

M
myy#4·11 年前

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

D
dayuoba#5·11 年前

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

C
chloe#6·11 年前

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

H
haio#7·11 年前

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

J
joney-pinkman#8·11 年前

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

参与回复
登录后即可参与回复。登录