你是指2端都是client?
同问
间接的靠服务器转发的方式应该可以吧,直接的肯定不行
这个应该有用:
https://github.com/LearnBoost/socket.io/wiki/Rooms
显然不行
不知道有没有别的现成模块可以用, 不然只能从 socket.join('room') 做文章了
socket.join('room')
用服务端做转发就行了,比如a、b这样通信: 创建socketMap对象用来记录对应socket,当客户端a、b连接时:
socketMap['a'] = socketA; socketMap['b'] = socketB;
客户端a发消息给b:
socketMap['b'].emit(...);
这个方法想过。但是当用户数量多的时候不知道这种方式可行不。
嗯
@chinawomen 怎么不可行呢,难道怕超出对象属性个数范围?可以在用户断开的时候:delete socketMap[‘a’];
@italkboy 如果用这个方法的话你给特定对象推送消息的时候。其实是广播到所有的在线用户只不过是其他用户没有监听而已。还有就是一对多的时候怎么动态区监听
@chinawomen @italkboy 给出的代码是服务器给特定客户端发送消息的,其他的客户端不会收到
@leizongmin 谢谢了
@chinawomen 我之前写的一段代码,可以参考下: https://github.com/atian25/SmartDoor/tree/develop/server
@atian25 谢谢了
socket.io也需要运行在浏览器中,怎么可能p2p?
貌似html5将来真的可以做到peer to peer
参见问题: http://stackoverflow.com/questions/1032006/will-html5-allow-web-apps-to-make-peer-to-peer-http-connections
但我不知道进一步的细节。
@italkboy 的方法可行,现在基本就是这么干的~
P2P必须UDP。不是socket.io的责任。
囧了。。。这还不如给两个人单独开个房间呢。
socket.join('room_ab'); io.sockets.in('room_ab').emit('msg', 'hello')
看到个模块 chat.io , 基本上把 socket.io 封装了一遍, 加了发送到指定用户的方法 https://github.com/DanielBaulig/chat.io https://github.com/DanielBaulig/chat.io/blob/master/package.json
chat.io
socket.io
这个chat.io 封装了socket.io的一些方法特别是对指定用户的封装对P2P的聊天实现比较方便