2014-12-04 66 views
0

是否有可能从客户端获取socket.id发出某种东西?socket.io从发出东西的客户端获取socket.id

像:

客户方:

socket.emit("lol", "data") 

服务器端:

socket.on("lol", function(data) { 
     // get the socket.id from the client who sended this!! 
}); 

所以,我真的在多人作出井字游戏。我正在使用房间。在每个房间里有2名球员。但我需要检测玩家在哪个房间点击了一个字段。

我也可以解释这样说:

服务器端:

player1.on("click", function(data) { 
       console.log(data + " in room" + playRoom); 
}); 

但是,这是行不通的。

+0

将套接字连接到服务器上的一个房间后,是不是所有消息都是从客户端'范围'到该房间的消息? – pherris 2014-12-04 16:06:30

+0

不是?你可以加入更多房间? – DazDylz 2014-12-04 18:22:47

回答

0

我打算使用答案格式,但这可能只是方向正确:)如果要将数据发送到房间,客户端必须指定要发送到的空间。例如:

socket.broadcast.to('room').emit('event_name', data); 

要加入房间:

socket.join('room'); 

这SO答案已经呈现出单一的插座如何能发出多个房间的一个很好的方式(但我没有看到实际发射订阅房间):https://stackoverflow.com/a/16475058/1861459

对于您的客户ID的实际问题 - 我可能会通过socket.rooms进行调试,看看您是否能够预测每个房间的订阅具体ID:https://github.com/Automattic/socket.io/wiki/Rooms#rooms-a-client-has-joined但是,我看不到这可以帮助你 - 如果你加入房间和播放到一个房间图书馆正在照顾你的名字空间。

+0

此处还检出自定义命名空间:http://socket.io/docs/rooms-and-namespaces/其中客户端可以执行'var socket = io('/ my-namespace');' – pherris 2014-12-04 20:15:45