gpt4 book ai didi

java - Windows 上的慢套接字接收大量小消息

转载 作者:行者123 更新时间:2023-12-01 06:18:17 26 4
gpt4 key购买 nike

我正在使用套接字库(SOCK_STREAM)在Python中开发小型服务器。服务器应该接收大量小消息(25-40字节),处理它们并尽快转发。

在Linux和OSX上它工作得很好,socket的recv函数一旦数据到达就返回数据。不幸的是,在Windows(8 Pro)上,它似乎在从recv函数返回之前积累数据。

我尝试限制使用recv函数读取的最大数据量,但这没有多大帮助。看起来数据是内部积累的。

我必须在服务器(Python)或客户端(Java 的套接字)中设置任何特定的套接字选项吗?

编辑

我的一位同事建议通过填充虚拟数据将每条消息四舍五入到 1KB。这可能有助于避免 @PeterLawrey 指出的内部缓冲区。

我没有机会尝试。您认为它可能有帮助并且是有效且广泛采用的技术吗?

最佳答案

在 Java 程序中操作为套接字保留的内核内存量的方法是设置 SO_RCVBUF(在 C/C++ 程序中,您可以使用 setsockopt 来执行此操作)。

我不想在这里复制大量代码,而是为您提供一些引用。

Documentation of SocketOptions
Documentation of SO_RCVBUF

您可以使用它们来减少内核在将内容返回给您之前缓冲的数量。

也就是说,我看不出为什么如果您的应用程序有 SOCK_STREAM,它不会立即返回任何可用数据。我认为可能还有其他问题。

关于java - Windows 上的慢套接字接收大量小消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com