我有一个NIO服务器,可以获取导致〜1meg响应的小型客户端请求。服务器使用以下来接受新的客户端:在Linux上设置套接字发送缓冲区大小的正确方法是什么?
SocketChannel clientChannel = server.accept();
clientChannel.configureBlocking(false);
clientChannel.socket().setSendBufferSize(2 * 1024 * 1024);
我然后注销“客户端连接的”线,包括clientChannel.socket的()的结果getSendBufferSize()。
在Windows上,从集8K改变了客户端套接字的发送缓冲区大小2megs。但在Linux上,套接字表示其发送缓冲区为131,071字节。
这会导致糟糕的表现,因为我clientChannel.write一次只写128K,所以需要7次传球让所有写入的数据。在Windows上,setSendBufferSize改变了性能。
的Linux似乎被配置为允许大套接字发送缓冲区:
$ cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
这个问题说,我需要之前调用accept设置SendBufferSize:http://stackoverflow.com/questions/12749174/can-i-increase-the-socket-send-buffer-size-if-the-send-失败 - 由于到缓冲区满。但是我没有clientChannel,直到我打电话给Accept。 – 2013-05-02 18:39:36
我对这个问题的评论是指接收缓冲区大小。您可以随时随地设置发送缓冲区大小。 – EJP 2013-05-02 21:29:50