Java Spring集成TCP刷新控制
我使用的是spring集成,ServerSocketFactory设置为具有良好的接收和写入缓冲区,TCPNoDelay设置为false。通过调试器在socket上验证设置是否正确
在spring integration serializer中写入outputstream时,我看到每个写入调用都被单独发送,带有一个TCP PSH(push)标志,即刷新
为什么会出现这种潮红?我怎样才能避免这种情况
你可以在下面搜索框中键入要查询的问题!
我使用的是spring集成,ServerSocketFactory设置为具有良好的接收和写入缓冲区,TCPNoDelay设置为false。通过调试器在socket上验证设置是否正确
在spring integration serializer中写入outputstream时,我看到每个写入调用都被单独发送,带有一个TCP PSH(push)标志,即刷新
为什么会出现这种潮红?我怎样才能避免这种情况
# 1 楼答案
您需要定制序列化程序——它们通常在写入所有部分后刷新(例如,长度标题+有效载荷;有效载荷+CRLF;STX+有效载荷+ETX;等等)
只需对您选择的序列化程序进行子类化,并覆盖
serialize()
方法以删除flush()
。将其注入连接工厂编辑:
哦,我明白了——Nagle的算法只适用于后续写入(请注意,有效负载和ETX在单个数据包中)。我们需要将流包装在缓冲输出流中。请打开一个JIRA issue
同时,你可以用这样的方法来解决这个问题