2015-11-02 52 views
1

我在實現套接字時遇到了問題。案例: 用戶在其列表中有n個房間, 用戶應該能夠從每個房間接收通知。實用或最佳socket.io實現

方法1)爲每個房間用戶打開一個套接字。在這個用戶必須爲每個房間打開多個套接字

方法2)用戶打開一個房間名爲= userid的套接字, 節點維護每個房間和該房間中的用戶的列表('room_user')在連接上完成)。 如

room_user:{ 
     room1 : { 
      user1Id, user2Id 
      } 
     room2 : { 
      user1Id, user3Id 
      } 
    } 

用於發送郵件的服務器會從列表中的指定房間的用戶ID的,然後在一個循環中的所有用戶發出消息。在這種方法中,用戶需要打開只有一個插座,但服務器在一個循環

我想知道哪種方法會更適合發射相同消息

+0

只需使用socket.io即可。 –

+0

我正在使用socktio,但我想知道我應該打開多個用戶擁有的每個房間的套接字或每個用戶有一個套接字 – libracious

+0

我認爲最好是爲每個房間做一個'namespace'並讓每個用戶擁有自己的套接字。 –

回答

1

如果考慮墊層TCP/IP廣播系統,你可能會發現用戶有一個單獨的websocket連接和服務器循環並且一次又一次地發送相同的消息(你的問題中的方法2)會更好。

請允許我解釋一下:

TCP/IP不支持廣播。因此,發送相同的消息到多個連接實際上是通過在連接列表上循環並一次又一次地發送相同的消息來實現的......

的確,您的代碼會將循環移動到更高級別的應用程序,但它可能會比阻礙您擴展應用程序能力的許多連接更好。