multithreading - UDP,多线程多个客户端?
问题描述
我正在研究一种 UDP 客户端-服务器架构,其中服务器(自然)可以处理多个客户端。但是我遇到了一些问题。我目前有一个“服务器”,它接受来自 IPAddress.Any 的 1 个套接字的数据。如果它是未知 IP,则会创建一个新的客户端实例并将所有相关数据放到那里。
现在这是我遇到的问题。当尝试在“服务器”和“客户端”上都使用 BeginReceiveFrom 时,所有数据都会被接收两次,所以这自然不是很有帮助。在接收数据后(但在解析、检查等之前)立即重新启动 BeginReceiveFrom 时,数据以随机顺序出现,有时数据丢失。(我在本地连接,所以我怀疑 UDP 会经常丢失数据包)。
使用类似的 TCP 架构,您可以毫无问题地在每个新客户端上运行 BeginReceiveFrom。这里有什么不同?TCP 堆栈如何处理将数据分发给所有连接的客户端?
我怎样才能实现类似的东西(或者至少线程多于一个)?必须为(例如 1.000 个)连接运行一个线程,并且必须在处理新的数据包之前解析/处理每个数据包,这是一个巨大的性能下降。
向每个客户端解析和“传递”数据并让每个客户端的 1 个线程提取和处理该数据是一个想法吗?
我知道人们通常希望看到一些代码来提供更好的帮助,但我认为在这种情况下这不会有太大帮助(问我你是否认为它会,我可以提供一些)。
我目前的解决方案是,BeginReceiveFrom > EndReceiveFrom > Parse data > Check data > BeginReceiveFrom > etc。
UDP是可选的。
解决方案
推荐阅读
- xml - SimpleDeserializer 在试图反序列化的东西中遇到了一个子元素,这不是预期的
- python - 通过 ModelForm 通过关系设置 Django M2M 的值
- oauth-2.0 - org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; 未分类的 SQLException
- javascript - 有没有办法为故事书提供“主文件”?
- listview - Yii2,从 ListView 中的另一个模型渲染 ActiveForms
- c# - 从 C# 调用 C++ 结构参数
- python-2.7 - 如何让 Python 的 os.system() 运行 Windows 10 tftp 客户端功能?
- node.js - 发射时是否需要套接字 id?
- html - Bootstrap 4 - 切换导航栏在所有内容后面打开
- kotlin - 有什么方法可以发送一个可为空的函数
作为 Kotlin 中的参数?