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