Spring TCP Integration仅每30秒以上读取一次



我在使用Spring Integration制作TCP服务器时遇到问题。我已将服务器设置为接受来自黑盒客户端的TCP连接。客户端将连接到服务器,并开始定期向其发送字符串数据。

我看到的是,在建立连接后(我从客户端得到确认(,直到大约30秒过去,我才在服务器上收到打印声明,在那里我一次收到5条消息。

我已经通过wireshark监控了传入数据,客户端定期发送数据,但服务器读取传入流的频率不够高。有没有一种方法可以配置TcpServer,使其更频繁地从传入客户端读取数据?

fun flow() = IntegrationFlows.from(
Tcp.inboundAdapter(Tcp.nioServer(port).serializer(ByteArrayRawSerializer()).deserializer(ByteArrayRawSerializer()))
.errorChannel(errorChannel())
)
.transform(ObjectToStringTransformer())
.handle { payload: String, headers: MessageHeaders ->
println(payload)
}
.get()

ByteArrayRawSerializer使用套接字关闭来检测消息的结束。

TCP是一种流协议,如果你想通过套接字发送多条消息,你需要以某种方式对数据进行定界,这样服务器就可以确定一条消息何时结束,下一条消息什么时候开始。请参阅文档。

TCP是一种流协议。这意味着必须为通过TCP传输的数据提供一些结构,以便接收器可以将数据划分为离散消息。连接工厂被配置为使用序列化器和反序列化器在消息有效负载和通过TCP发送的位之间进行转换。这是通过分别为入站和出站消息提供反序列化程序和序列化程序来实现的。Spring Integration提供了许多标准的序列化程序和反序列化程序。

。。。

ByteArrayRawSerializer将字节数组转换为字节流,并且不添加其他消息分界数据。有了这个序列化程序(和反序列化程序(,客户端可以有序地关闭套接字来指示消息的结束。使用此序列化程序时,消息接收将挂起,直到客户端关闭套接字或发生超时为止。

我的猜测是客户端在发送消息后没有关闭连接,并且有30秒的SO超时(在客户端或服务器上-您没有显示连接出厂配置(。

相关内容

最新更新