[英]Spring Integration ByteArrayRawSerializer TCP Client Server
[英]Spring integration TCP server push to client
我需要实现一个TCP服务器,该服务器基本上应该打开一个套接字,作为与客户端握手的一部分。
套接字打开后,服务器需要保持套接字打开,并能够通过打开的套接字将消息从服务器推送到客户端
我查看了一些Spring集成示例,但不确定所看到的示例是否确实是对我的需求的引用。
1。spring集成tcp是否具有保持打开套接字并将消息从服务器发送到客户端的功能?
服务器应该也支持传入请求
客户端实现是作为简单的Tcp Java客户端编写的模拟
谢谢! 尼尔
这里的上下文配置
<int-ip:tcp-connection-factory id="server"
type="server"
port="5679"
host="localhost"
single-use="false"
deserializer="javaDeserializer"
serializer="javaSerializer" />
<int-ip:tcp-inbound-channel-adapter id="inboundServer"
channel="inloop"
connection-factory="server" client-mode="false"/>
<int-ip:tcp-outbound-channel-adapter id="outboundServer"
channel="outloop"
connection-factory="server" client-mode="false"/>
<channel id="inloop"/>
<channel id="outloop"/>
在服务器端,我使用
outputchanel.send(new GenericMessage<String>("HI World from server16\n",header));
并在客户端读取推送消息与
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socketClient.getInputStream()));
while ((serverResponse = stdIn.readLine()) != null) {
_logger.info("RESPONSE FROM SERVER::"+serverResponse);
}
客户端是未配置spring集成的java基本tcp客户端,这是将来集成的模拟客户端
为了支持不以'\\ n'结尾的字节数组请求的回显服务器,我扩展了AbstractByteArraySerializer,并覆盖了反序列化
public byte[] deserialize(InputStream inputStream) throws IOException {
_Logger.trace("start deserialize");
byte[] result;
try {
byte[] buffer = new byte[getMaxMessageSize()];
int numOfBytes = inputStream.read(buffer, 0, buffer.length);
result = copyToSizedArray(buffer, numOfBytes);
} catch (IOException e) {
_Logger.error("Exception on deserialize tcp inbound stream ", e);
//publishEvent(e, , n);
throw e;
}
return result;
}
您可以使用协作通道适配器在同级之间进行完全任意的消息传递。
请参阅TCP事件 。
当客户端连接时,tcp入站通道适配器(实际上是连接工厂)将发布TcpConnectionOpenEvent
。
您可以使用ApplicationListener
接收这些事件。
该事件包含一个connectionId
。 然后,您可以使用名为ip_connectionId
( IpHeaders.CONNECTION_ID
)的标头中的connectionId
,开始将消息发送到tcp出站通道适配器。
入站适配器接收到的来自客户端的入站消息(如果有)将在标头中具有相同的值。
只需配置服务器连接工厂并配置两个适配器即可使用它。
如果服务器必须打开套接字,请使用client-mode="true"
并注入客户端连接工厂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.