首页 > 解决方案 > UDP,多线程多个客户端?

问题描述

我正在研究一种 UDP 客户端-服务器架构,其中服务器(自然)可以处理多个客户端。但是我遇到了一些问题。我目前有一个“服务器”,它接受来自 IPAddress.Any 的 1 个套接字的数据。如果它是未知 IP,则会创建一个新的客户端实例并将所有相关数据放到那里。

现在这是我遇到的问题。当尝试在“服务器”和“客户端”上都使用 BeginReceiveFrom 时,所有数据都会被接收两次,所以这自然不是很有帮助。在接收数据后(但在解析、检查等之前)立即重新启动 BeginReceiveFrom 时,数据以随机顺序出现,有时数据丢失。(我在本地连接,所以我怀疑 UDP 会经常丢失数据包)。

使用类似的 TCP 架构,您可以毫无问题地在每个新客户端上运行 BeginReceiveFrom。这里有什么不同?TCP 堆栈如何处理将数据分发给所有连接的客户端?

我怎样才能实现类似的东西(或者至少线程多于一个)?必须为(例如 1.000 个)连接运行一个线程,并且必须在处理新的数据包之前解析/处理每个数据包,这是一个巨大的性能下降。

向每个客户端解析和“传递”数据并让每个客户端的 1 个线程提取和处理该数据是一个想法吗?

我知道人们通常希望看到一些代码来提供更好的帮助,但我认为在这种情况下这不会有太大帮助(问我你是否认为它会,我可以提供一些)。

我目前的解决方案是,BeginReceiveFrom > EndReceiveFrom > Parse data > Check data > BeginReceiveFrom > etc。

UDP是可选的。

标签: multithreadingsocketsudp

解决方案


推荐阅读