场景:想要从服务器向多个客户端广播消息。
需要:我有一个服务器和多个连接到该服务器的客户端。如果管理员想要更新服务器,那么服务器将向所有连接的客户端广播消息“请注销...服务器正在更新”。
如果有人对消息广播回复有任何想法,请尽快回复。我正在使用 TcpServer
语言:c#
场景:想要从服务器向多个客户端广播消息。
需要:我有一个服务器和多个连接到该服务器的客户端。如果管理员想要更新服务器,那么服务器将向所有连接的客户端广播消息“请注销...服务器正在更新”。
如果有人对消息广播回复有任何想法,请尽快回复。我正在使用 TcpServer
语言:c#
对于 TCP,我使用从主服务器协议线程初始化的线程;当需要发送给每个客户端的主数据结构发生变化时,会设置一个静态布尔值并将相关数据发送给客户端,该客户端还有一个线程,该线程在主客户端协议线程之外实现以监听和实施这些更改。
我使用令牌传递系统来锁定对数据结构的访问,因此客户端只能在调用其令牌时进行更改。我标记每个标记,以便在每个用户收到要更改的数据之前,静态变量不会设置为 false。
与使用单行代码相比,这在逻辑上更具挑战。无论如何,任何库接口都必须使用类似的逻辑,因为它必须联系 (n) 个客户端。
就我而言,这种用法减少了客户端调用,并允许仅传递已更改的数据。与传递整个数据结构的初始加载不同,但我做了类似的事情,也与遍历数据结构并将其保存到硬盘有关。这意味着减少了通过网络传递的数据,并使主协议线程保持打开更长时间,以便真正需要访问的人获得它。
编辑:所以没有人抱怨,我说的是直接 TCP/IP 而不是 UDP,需要建立连接。UDP 确实使用了多播概念,并且设置起来相当容易。请注意,它很容易带来安全风险,尽管它确实提供了一些效率,但它的使用范围应该被视为有限。