Я хочу добиться следующего, используя spring-integration
: наличие одноэлементного открытого сокета, который постоянно получает и записывает данные, asyncrhon!
Это означает, что мне нужно открыть сокет, который постоянно читает из одного сокета,отправляет каждое сообщение для асинхронной обработки и возвращает ответы через сокет, также асинхронные.
Как мне добиться этого асинхронного шаблона?
Особенно: как я могу использовать Serializer/Deserializer
?Насколько я понял, сериализатор вызывается только при новом сокетном соединении, поэтому в моем случае только один раз при запуске первого сообщения?
@Configuration
public class SocketConfig {
@Bean
public TcpConnectionFactoryFactoryBean tcpFactory(MyConverter converter) {
TcpConnectionFactoryFactoryBean fact = new TcpConnectionFactoryFactoryBean();
fact.setType("server");
fact.setPort(PORT);
fact.setUsingNio(true); //should I use true or false?
fact.setSingleUse(false); //keep socket constantly open
fact.setSerializer(converter);
fact.setDeserializer(converter);
return fact;
}
@Bean
public TcpInboundGateway serverGateway(
@Qualifier("tcpFactory") TcpConnectionFactoryFactoryBean factory,
@Qualifier("serverChannel") MessageChannel serverChannel) throws Exception {
TcpInboundGateway g = new TcpInboundGateway();
g.setConnectionFactory(factory.getObject());
g.setRequestChannel(serverChannel);
return g;
}
}
@MessageEndpoint
public class SocketEndpoint {
@ServiceActivator(inputChannel = "serverChannel")
public Object run(Object obj) {
}
}
@Service
public class MyConverter implements Serializer<Object>, Deserializer<Object> {
//read from socket
@Override
public Object deserialize(InputStream inputStream) {
}
//send back to socket
@Override
public void serialize(Object message, OutputStream outputStream) {
}
}