- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
TCP_NODELAY 是一个启用快速发送 TCP 数据包的选项,无论它们的大小如何。当速度很重要时,这是非常有用的选项,但是,我很好奇它会对此做什么:
Socket socket = [some socket];
socket.setTcpNoDelay(true);
OutputStream out = socket.getOutputStream();
out.write(byteArray1);
out.write(byteArray2);
out.write(byteArray3);
out.flush();
我试图找出 flush 在 SocketOutputStream
上的实际作用,但据我所知,它什么也没做。我曾希望它会告诉套接字“现在发送所有缓冲数据”,但不幸的是,不,它没有。
我的问题是:这些 3 字节数组是在一个数据包中发送的吗?我知道您对 TCP 如何构造网络数据包没有太多控制权,但是有什么方法可以告诉套接字(至少尝试)打包这些字节数组,从而避免网络开销?可以手动打包字节数组并在一次调用中将它们发送到 write
帮助吗?
最佳答案
My question is: are these 3 byte arrays sent in one packet?
由于您已禁用 Nagle 算法,几乎可以肯定不会,但您不能 100% 确定。
I know you don't have much control over how TCP constructs a network packet, but is there any way to tell the socket to (at least try to) pack these byte arrays
是的。 不要禁用 Nagle 算法。
so network overhead is avoided? Could manually packing the byte arrays and sending them in one call to write help?
是的,或者更简单的只是将套接字输出流包装在 BufferedOutputStream
中,并在您希望发送数据时调用 flush()
,按照您当前的代码. flush()
对套接字输出流不执行任何操作是正确的,但它会刷新 BufferedOutputStream。
关于java - TCP_NODELAY 如何影响连续的 write() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091523/
我可以在接受新连接时设置 TCP_NODELAY,如下所示: fd = accept(listener, (struct sockaddr *)&sin, &slen); if (fd FD_SET
我有一个使用 TCP 从设备读取数据包的应用程序。我想知道我的接收方应用程序是否使用 TCP_NODELAY 选项创建套接字,设备会自动开始发送数据包而不缓冲它们,还是我必须在发送方(设备)上进行此更
我正在使用 Boost asio 发送 TCP 消息。我设置了 NO_DELAY 选项,因为这是一个“实时”控制系统。我看到使用 Wireshark 在消息中设置了 PSH 标志。我对性能感到满意,并
根据我对 Nagel 算法的理解,如果可能的话,它会尝试在一条消息中发送多条消息,以使用更少的带宽。 我的问题是,对于一个大学项目,我必须禁用它;我必须首先发送一个名称,然后发送年、月、日,最后发送文
我正在编写一个 c 程序,它通过 tcp 连接发送 bash shell 的输出。为了使我的程序更具响应性,我使用 setsockopt() 来启用 TCP_NODELAY,这会禁用 Nagle 的缓
我一直认为 Nagle 的算法会在两个方向影响套接字,并且设置 TCP_NODELAY 以某种方式通知远程端也关闭 Nagle。 是这样吗,还是设置 TCP_NODELAY 只影响调用它的那一端的行为
我正在诊断一个奇怪的网络问题,(我认为)我已经缩小到行为不当的 HTTP 客户端或服务器以及一些 HTTP1.1 流水线和/或 Nagle 的算法交互。我试图在 curl 中禁用 TCP_NODELA
我正在诊断一个奇怪的网络问题,(我认为)我已经缩小到行为不当的 HTTP 客户端或服务器以及一些 HTTP1.1 流水线和/或 Nagle 的算法交互。我试图在 curl 中禁用 TCP_NODELA
我正在尝试在 Ubuntu 16.04 中编译 ChatScipt v7.55。但是当我使用 make server 命令时,我得到了这个错误: evserver.cpp: In function ‘
TCP_NODELAY 和 MSG_DONWAIT 有什么区别?我知道一个是特定于 TCP 的,另一个是发送时的通用套接字选项,但这两个选项是否有行为不同场景下的不同? 就像TCP_NODELAY一样
我正在尝试在 unix 域套接字上设置标志 tcp_nodelay。我们可以设置它还是为 UNIX 域套接字设置 tcp_nodelay 是否有意义,特别是在 Linux 上? 请指教。 谢谢 最佳答
如果我用 TCP_NODELAY 创建一个 TCP 套接字启用选项并将其用于listen对于新连接,accept 会返回新套接字吗?还有TCP_NODELAY启用? 不同的套接字可以有不同的配置选项,
TCP_NODELAY 是一个启用快速发送 TCP 数据包的选项,无论它们的大小如何。当速度很重要时,这是非常有用的选项,但是,我很好奇它会对此做什么: Socket socket = [some s
我最近在运行一些比较网络性能与环回性能的性能测试时偶然发现了一个有趣的 TCP 性能问题。在我的例子中,网络性能超过了环回性能(1Gig 网络,相同的子网)。在我处理延迟的情况下,延迟是至关重要的,因
如果您在套接字上的每个调用上设置 TCP_QUICKACK 设置,之前设置了 TCP_NODELAY,QUICKACK 选项是否会覆盖 NODELAY 调用? 连接时: int i = 1; sets
我试图通过设置 TCP_NODELAY 在 Ubuntu Linux 机器上使用我的 TCP 套接字禁用 Nagle 算法范围。由于某种原因, 中未定义此常量。或 .这个常量是否已被弃用,然后从 L
我知道他们都禁用了 Nagle 的算法。 什么时候应该/不应该使用它们中的每一个? 最佳答案 首先,并非两者都禁用了 Nagle 算法。 Nagle 的算法用于减少线路中更多的小型网络数据包。该算法是
我试图通过在设置后回读它来验证我的 TCP_NODELAY 设置是否有效。 我将值设置为“1”,但当我读回它时,它设置为“4”。恐怕我做错了什么。 这是我的代码: int tcpBefore;
我正在使用 Scala 的远程参与者,但往返时间(即使是一条微不足道的消息)是 80 毫秒,大概是由于底层套接字没有禁用 TCP/IP Nagle 算法(也称为 TCP_NODELAY),或者至少这是
在写了一个answer之后关于 TCP_NODELAY 和 TCP_CORK,我意识到我一定缺乏对 TCP_CORK 细节的了解,因为我不是 100% 清楚为什么 Linux 开发人员觉得有必要引入一
我是一名优秀的程序员,十分优秀!