2015-10-19 95 views
0

我有一個socket.io應用程序。有沒有辦法暫時鎖定連接(只有一個連接)一段時間(比如說30秒)而不丟棄連接。我想要做的是,在客戶端觸發事件後,我希望該事件不會在30秒之前再次觸發。順便說一下,由於項目限制,我無法在客戶端執行此操作。Socket.io睡一些客戶端

回答

0

首先我不知道服務器端的限制,但它也可能影響客戶端,但基本上你應該創建一個房間,然後你必須指定哪個房間獲取套接字消息。您可以創建像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. 
} 

這個想法是一個普遍的概念。您可以根據您的確切要求來設計該想法。

0

Socket.io並不完全是這個功能。但你可以在很多方面

在任何情況下代碼時,你需要停止發送該事件或停止接收

如果您不能修改客戶端,只需保存socket.idstopped和setTimeout的數組30秒將它拔出來,從陣列

另一種方法來subscribe/unsubscribe聽衆 How to unsubscribe from a socket.io subscription?

,我想你可以使用的房間爲邏輯。

  • 在一個房間裏所有的插座,所有監聽器發送/接收的那個房間
  • 觸發的事件後,你離開那個房間爲您的插座秒
  • 30後再次加入到它