2014-04-29 174 views
0

我需要建议如何实现,如果有可能,与Spring集成以下TCP流不常见的TCP流:与Spring集成

  1. 只有服务器端的需求。
  2. 为输入连接
  3. 在客户端的连接的TCP服务器等待,服务器将数据发送到客户端
  4. 客户端与响应回复
  5. 服务器可以用新的数据立即回复或等待外部应用程序事件将新软件包发送给客户端。

在常规的代码可以证明如下:

def serverSocket = new ServerSocket(...) 
def connSocket = serverSocket.accept() 

connSocket.outputStream.write(...) 

while(true) { 
    def readBuffer = new byte[256] 
    connSocket.inputStream.read(readBuffer) 
    if(needToSendBack(readBuffer)) { 
     connSocket.outputStream.write(...) 
    } 
} 

def sendByDemand(def data) { 
    connSocket.outputStream.write(data) 
} 

方法sendByDemand可从单独的线程调用。

这里是我标志着我自己的问题的列表,防止我与Spring集成实现它(2.x版):

  1. 据我了解,标准的“服务激活“方法不能在这种情况下工作,因为它是”连接事件“驱动的。所以,当应用程序决定将新的数据发送到客户端无法使用该服务激活
  2. 我没有“在TCP连接”事件。我发现,3.0版自带的事件,在这方面的支持,但因为我不能升级到3.0,我实现与连接工厂的拦截器的连接检查。但是,当我知道客户端已连接时,尝试使用直接通道发送消息会失败,并显示“无订户”错误。

如果有人可以发布这个场景的可能的Spring配置或者指向类似的流程示例,它可能会非常有帮助。

回答

0

你的使用情况是可能的,但它会使你的生活,如果你能升级到3.0更容易。

“分派器没有订阅者的手段没有消费者订阅该频道。

你需要证明你的配置;您必须使用协作通道适配器(不是网关)。

您需要在建立连接时捕获连接的connectionId,并使用它来填充ip_connectionId标头,以便出站通道适配器知道哪个套接字写入消息。