如何判断哪个套接字连接使用socket.io单击了一个按钮?

如果页面上有一个按钮,并且您希望确保在另一个套接字单击其按钮之前无法再次单击该按钮。

如果套接字a单击我应该禁用该按钮,直到另一个套接字发送一条消息,他们点击了他们的按钮,然后返回第四个。

$(".buttonTurns").on("click", function(){ socket.emit("turnbutton click") }) 

并且当他们连接时他们不输入任何名字

每个socket.io会话都会自动分配一个唯一的字符串作为id。 在服务器上,您可以从以下位置获取:

 socket.id 

如果您在会话内(即返回套接字对象的连接),您只需执行以下操作即可将消息发送回客户端:

 socket.emit('event name',data); 

但是,如果您要将消息发送到其他会话,则需要执行以下操作:

 io.sockets.socket(socket_id).emit('event name',data); 

如果要向所有连接的会话发送消息,那么只需执行以下操作:

 io.emit('event name', data); // broadcast 

如果您的应用程序具有需要管理的状态,那么一种技术是使用套接字ID作为密钥将它们存储在对象中:

 var buttonState = {} io.on('connection',function('socket'){ // default button to off when socket connects: bottonState[socket.id] = 'off'; socket.on('on button',function(){ bottonState[socket.id] = 'on'; }) socket.on('off button',function(){ bottonState[socket.id] = 'off'; }) }) 

现在您可以管理服务器上每个客户端的单个状态,您可以使用它来将它们传达给其他客户端。

您可以为每个客户端(客户端javascript或服务器端javascript)设置UUID。

对于服务器端解决方案

正如@slebetman在评论中提到的,socket.io有一个内置的每个套接字的唯一标识符。

正如@slebetman在他的回答中建议的那样,要获得套接字的唯一ID(),请参阅他的答案以获取更多详细信息):

 // v0.6.x var sid = socket.sessionId; // v0.7.x var sid = socket.id; 

对于客户端解决方案

如果您在客户端设置唯一ID,则可能需要创建自己的唯一ID。

我从6个转速中获取了以下代码,Briguy37 对此网站上的问题的回答如下 :

 function generateUUID(){ var d = new Date().getTime(); var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = (d + Math.random()*16)%16 | 0; d = Math.floor(d/16); return (c=='x' ? r : (r&0x3|0x8)).toString(16); }); return uuid; }; 

随机性应该足够强大,以便所有客户端都可以使用此ID生成器获得唯一标识符。 这应该与您想要在此处使用的代码一起使用。