跳到主要内容
CNode

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

社区
Cchinawomen发布于 14 年前最后回复 13 年前
24179590
查看回复

回复 (24)

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

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

J
jiyinyiyong#2214 年前

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

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

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

socket.join('room_ab');
io.sockets.in('room_ab').emit('msg', 'hello')
G
guilin#2014 年前

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

Z
zelome#1914 年前

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

D
duzhigang#1814 年前

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

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

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

W
wbpmrck#1714 年前

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

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

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

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

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

I
italkboy#714 年前

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

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

客户端a发消息给b:

socketMap['b'].emit(...);
J
jiyinyiyong#614 年前

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

D
DoubleSpout#514 年前

显然不行

D
danielking#414 年前
D
danielking#314 年前

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

K
kaima#214 年前

同问

A
atian25#114 年前

你是指2端都是client?

参与回复

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