【问题标题】:Socket.io sleep some clientSocket.io 睡眠一些客户端
【发布时间】:2016-01-17 20:33:56
【问题描述】:

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

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

    然后你可以指定房间发送消息。为特定用户创建 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 秒后你再次加入它

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 2018-11-27
        • 2012-02-20
        • 2020-01-11
        相关资源
        最近更新 更多