CNode

socket.io可以点对点么?求思路

Cchinawomen发布于14 年前最后回复13 年前24 回复17924 浏览0 收藏
查看回复

回复 (24)

D
DoubleSpout#1·14 年前

显然不行

J
jiyinyiyong#2·14 年前

不知道有没有别的现成模块可以用, 不然只能从 socket.join('room') 做文章了

I
italkboy#3·14 年前

用服务端做转发就行了,比如a、b这样通信: 创建socketMap对象用来记录对应socket,当客户端a、b连接时:

socketMap['a'] = socketA;
socketMap['b'] = socketB;

客户端a发消息给b:

socketMap['b'].emit(...);
I
italkboy#7·14 年前
引用 italkboy用服务端做转发就行了,比如a、b这样通信: 创建socketMap对象用来记录对应socket,当客户端a、b连接时: socketMap['a'] = socketA; socketMap[...

@chinawomen 怎么不可行呢,难道怕超出对象属性个数范围?可以在用户断开的时候:delete socketMap['a'];

C
chinawomen#8·14 年前
引用 italkboy用服务端做转发就行了,比如a、b这样通信: 创建socketMap对象用来记录对应socket,当客户端a、b连接时: socketMap['a'] = socketA; socketMap[...

@italkboy 如果用这个方法的话你给特定对象推送消息的时候。其实是广播到所有的在线用户只不过是其他用户没有监听而已。还有就是一对多的时候怎么动态区监听

L
leizongmin#9·14 年前
P
poker#13·13 年前

这个chat.io 封装了socket.io的一些方法特别是对指定用户的封装对P2P的聊天实现比较方便

S
sumory#14·13 年前
  • socket.io不能点对点
  • 消息都已服务器为中心转发
  • 在服务端保存一个用户的所有client列表,如{userId1:[client1,client2],userId2:[client1,client2]}
  • 客户端发送时指明目的用户(如以userId标识,权限、安全之类的另作验证即可)
  • 服务器查找目的用户所有client,emit出去即可
A
atian25#15·14 年前

你是指2端都是client?

K
kaima#16·14 年前

同问

D
danielking#17·14 年前

间接的靠服务器转发的方式应该可以吧,直接的肯定不行

D
danielking#18·14 年前
W
wbpmrck#19·14 年前

socket.io也需要运行在浏览器中,怎么可能p2p?

D
duzhigang#20·14 年前

貌似html5将来真的可以做到peer to peer

参见问题: http://stackoverflow.com/questions/1032006/will-html5-allow-web-apps-to-make-peer-to-peer-http-connections

但我不知道进一步的细节。

Z
zelome#21·14 年前

@italkboy 的方法可行,现在基本就是这么干的~

G
guilin#22·14 年前

P2P必须UDP。不是socket.io的责任。

W
wenbob#23·14 年前
引用 italkboy用服务端做转发就行了,比如a、b这样通信: 创建socketMap对象用来记录对应socket,当客户端a、b连接时: socketMap['a'] = socketA; socketMap[...

囧了。。。这还不如给两个人单独开个房间呢。

socket.join('room_ab');
io.sockets.in('room_ab').emit('msg', 'hello')
J
jiyinyiyong#24·14 年前

看到个模块 chat.io , 基本上把 socket.io 封装了一遍, 加了发送到指定用户的方法 https://github.com/DanielBaulig/chat.io https://github.com/DanielBaulig/chat.io/blob/master/package.json

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