Socket.io 睡眠一些客户端
Posted
技术标签:
【中文标题】Socket.io 睡眠一些客户端【英文标题】:Socket.io sleep some client 【发布时间】:2016-01-17 20:33:56 【问题描述】:我有一个 socket.io 应用程序。有没有办法在不断开连接的情况下临时锁定连接(只有一个连接)一段时间(比如 30 秒)。我想要做的是,在客户端触发事件后,我希望在 30 秒之前不再触发该事件。顺便说一句,由于项目限制,我无法在客户端执行此操作。
【问题讨论】:
【参考方案1】:首先我不知道服务器端有任何限制,但它也可能影响客户端,但基本上你应该创建一个房间,然后你必须指定哪个房间获取套接字消息。您可以创建 activeRoom
和 suspendedClients
之类的(房间命名完全作为示例)。
然后你可以指定房间发送消息。为特定用户创建 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
函数每秒暂停的客户端。
if(suspendedClients[i].countdown == 0)
// Remove client from suspendedClients room.
这个想法是一个普遍的概念。您可以根据自己的具体要求塑造这个想法。
【讨论】:
【参考方案2】:Socket.io 并没有这个功能。但你可以通过多种方式对其进行编码
在任何情况下,您都需要停止发送该事件或停止接收
如果无法修改客户端,只需将socket.id
保存在stopped
的数组中,然后setTimeout 30 秒即可将其从数组中拉出
subscribe / unsubscribe
听众的另一种方法
How to unsubscribe from a socket.io subscription?
我认为你可以使用房间来实现这种逻辑。
一个房间中的所有套接字和该房间的所有侦听器发送/接收 事件触发后,您为套接字留出空间 30 秒后你再次加入它【讨论】:
以上是关于Socket.io 睡眠一些客户端的主要内容,如果未能解决你的问题,请参考以下文章