Node.js Socket.io使某些客户端睡眠

Node.js Socket.io使某些客户端睡眠,node.js,socket.io,Node.js,Socket.io,我有一个socket.io应用程序。是否有一种方法可以在不中断连接的情况下临时锁定连接(仅单个连接)一段时间(例如30秒)。我想做的是,在客户端触发事件之后,我希望在30秒之前不要再次触发该事件。顺便说一句,由于项目限制,我无法在客户端执行此操作。首先,我不知道服务器端有任何限制,但它可能也会影响客户端,但是基本上您应该创建一个文件室,然后必须指定从哪个文件室获取套接字消息。您可以创建类似于activeRoom和SuspendedClient(房间命名完全作为示例) 然后您可以指定要发送消息的房

我有一个socket.io应用程序。是否有一种方法可以在不中断连接的情况下临时锁定连接(仅单个连接)一段时间(例如30秒)。我想做的是,在客户端触发事件之后,我希望在30秒之前不要再次触发该事件。顺便说一句,由于项目限制,我无法在客户端执行此操作。

首先,我不知道服务器端有任何限制,但它可能也会影响客户端,但是基本上您应该创建一个文件室,然后必须指定从哪个文件室获取套接字消息。您可以创建类似于
activeRoom
SuspendedClient
(房间命名完全作为示例)

然后您可以指定要发送消息的房间。为特定用户创建30秒定时;获取他的
socketId
并将其倒计时时间
30
设置为json对象

// Multiple Clients may be suspended , use case ?.
var suspendedClients = [{
  socketId: 123981787,
  countdown: 30
},{
  socketId: 987987788,
  countdown: 21
}];
// That users are also in suspendedClients room so they can't get messages.
// Also you might use redis to store them(?. if there is no restrictions about to use a new datastore).
您可以每秒签入
setInterval
function挂起的客户端

if(suspendedClients[i].countdown == 0) {
   // Remove client from suspendedClients room.
}

这是一个普遍的概念。你可以根据自己的具体需求来塑造这个想法。

Socket.io并没有这个功能。但是你可以用很多方法来编码

在任何情况下,您都需要停止发送该事件或停止接收

如果您无法修改客户端,只需将
socket.id
保存在
stopped
的数组中,并设置超时30秒以将其从数组中拉出即可

订阅/取消订阅
侦听器的另一种方法

我想你可以用房间来表达这种逻辑

  • 一个房间中的所有插座以及该房间的所有侦听器发送/接收
  • 事件触发后,您将离开该房间以安装插座
  • 30秒后,你再次加入