使用spring tcp连接工厂流式传输

时间:2016-08-17 14:29:44

标签: java spring sockets tcp integration

我有以下用例:

  • 服务器侦听特定端口以获取新的套接字连接
  • 客户端打开服务器套接字连接并开始流式传输输入流
  • 服务器接受连接并使用输入流实时执行某些操作

我使用以下代码使用Spring Boot(在tomcat上部署)为单个套接字实现了它:

try (ServerSocket serverSocket = new ServerSocket(6666)) {
        if (serverSocket.isBound()) {
            Socket client = serverSocket.accept();
            doSomething(client.getInputStream());               
        }
    }

现在我希望能够以干净的方式处理多个客户端连接。我以为我可以使用Spring Integration的TCP连接工厂来完成那项工作,但我认为我完全错过了消息传递部分,因为在我的用例中我不发送任何消息但是普通的流不能正常工作,对吧?通过这种设置,我收到了来自客户端的数百条消息,而不是一条消息:

@Bean
public AbstractServerConnectionFactory serverCF() {
    TcpNetServerConnectionFactory connFactory = new TcpNetServerConnectionFactory(port);
    connFactory.setDeserializer(new SpeechSocketDeserializer());
    connFactory.setSingleUse(true);
    return connFactory;
}

@Bean
public TcpInboundGateway tcpInGate(AbstractServerConnectionFactory connectionFactory) {
    TcpInboundGateway inGate = new TcpInboundGateway();
    inGate.setConnectionFactory(connectionFactory);
    inGate.setRequestChannel(fromTcp());
    return inGate;
}

@Bean
public MessageChannel fromTcp() {
    return new DirectChannel();
}

请问您可以建议在服务器端实现多套接字连接处理的最佳方法是什么?我可以使用一些Spring功能/框架吗?

0 个答案:

没有答案