2014-04-29 173 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標頭,以便出站通道適配器知道哪個套接字寫入消息。