我在实现套接字方面遇到了问题。案例:用户在他的列表中具有n个房间,用户应该能够从每个房间接收通知。
方法1)为每个房间用户打开一个插座。在这种情况下,用户必须为每个房间打开多个插座
方法2)用户打开房间名称=userid的单个套接字,节点维护每个房间和该房间中的用户的列表("room_user")(这可以在连接时完成)。例如
room_user:{
room1 : {
user1Id, user2Id
}
room2 : {
user1Id, user3Id
}
}
对于发送消息,服务器从指定房间的列表中获取userid,然后将消息循环发送给所有用户。在这种方法中,用户只需要打开一个套接字,但服务器必须在循环中发出相同的消息
我想知道哪种方法更适合
如果考虑底层TCP/IP广播系统,您可能会发现用户最好有一个单独的websocket连接和服务器循环,并一次又一次地发送相同的消息(问题中的方法2)。
请允许我解释一下:
TCP/IP不支持广播。出于这个原因,向多个连接发送同一消息实际上是通过在连接列表上循环并一次又一次地发送同一条消息来实现的。。。
的确,您的代码会将循环移动到应用程序的更高级别,但这可能比拥有许多会阻碍您扩展应用程序的连接要好。