如何使用Spring Integration实现TCP连接握手?

时间:2013-09-03 16:10:57

标签: java tcp deserialization spring-integration handshaking

我是Spring Integration的新手,目前正尝试通过TCP从某些设备接收数据。 我想出了以下Spring语境:

<bean id="serializer" class="com.somepackage.CustomSerializer"/>

<int-ip:tcp-connection-factory id="connectionFactory"
                               type="server"
                               port="${tcp.socket.connection.listener.port}"
                               deserializer="serializer" />

设备协议的问题在于,在初始连接时,它会发送一个握手序列,并在开始发送消息之前期待一个神奇的答案。

消息模式与握手序列不同,我无法实现区分这两者的序列化器。如果可以的话,我会将这个握手过程作为拦截器来实现。 所以我试图实现一个statefull序列化器,但结果发现序列化器是单例,在不同的连接之间共享。

在默认机制(将数据拆分成消息)发挥作用之前,您能否建议如何执行一些自定义协商(握手)?我应该自定义连接工厂吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您需要自定义TCP Interceptor。来自文档:

  

16.4 TCP连接拦截器

     

可以使用对TcpConnectionInterceptorFactoryChain的引用来配置连接工厂。拦截器可用于向连接添加行为,例如协商,安全性和其他设置。框架当前没有提供拦截器,但是,例如,请参阅源存储库中的InterceptedSharedConnectionTests。