1

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

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

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

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

编辑

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

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

4

1 回答 1

-1

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

我宁愿不在这里复制大量代码,而是给你一些参考。

SocketOptions
文档 SO_RCVBUF 文档

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

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

于 2013-08-22T16:42:49.277 回答