【发布时间】:2015-05-04 14:06:22
【问题描述】:
我有几个应用程序通过多个通道发送多播消息。大多数频道每秒发布数千条消息。我遇到问题的频道(尽管它可能也会影响其他频道)每分钟发布大约 8k 条消息。大多数时候,所有的消息都会到达。有时,应用层缺少一些或许多,但 Wireshark 会捕获它们(排除网络/发送问题)。我不相信这是应用程序,原因有两个:1) 我有两个完全独立的应用程序正在运行,一个用 C++ 编写,另一个用 C# 编写,没有共享代码。两个应用程序总是接收/错过相同数量的消息。 2) 这两个相同的应用程序,当它们在发布的同一台服务器上运行时,不会错过任何消息。因此,NIC 和应用程序(即操作系统)之间似乎有些不对劲。网络和 CPU 利用率可以忽略不计 (~5%)。
我们已应用此处描述的补丁,http://support.microsoft.com/kb/2639824,但没有成功。
任何想法将不胜感激。
【问题讨论】:
-
windows 可以在不通知应用程序的情况下丢弃 UDP 包。您可以尝试增加缓冲区大小、单独读取线程等。但是如果所有这些都不起作用,您可以使用 winpcap 来捕获您的多播流,就像 wireshark 正在使用的那样......
-
我已经在使用一个大缓冲区,大到足以捕获所有消息。我在我的 C++ 应用程序中使用 IOCP,而 C#(我认为)在幕后使用它。 C# 应用程序将数据复制到缓冲区(来自 byte[] 池)并将其推送到队列中以供另一个线程处理)。所以,更多的线程将无济于事。没用过winpcap。这似乎是一种绕过操作系统的方法。对吗?
-
是的,使用 winpcap 将绕过操作系统。请注意,您仍然需要操作系统来订阅多播流。
标签: c++ windows multicast packets