2011-09-14 49 views
1

我已經使用netty製作了一個客戶端 - 服務器示例。 我已經爲服務器和客戶端定義了處理程序。 基本上我將客戶端連接到服務器併發送一些消息。 每個收到的消息都會被髮回(消息內容被轉換爲大寫)。 在服務器和客戶端收到的消息的所有工作都由定義的處理程序完成。直接在客戶端處理收到的消息(使用nio通過netty-framework)

但是我想直接在客戶端 中使用或更好地接收/接受一些消息,而不僅僅是在處理程序中。所以我的問題是有可能讓一些監聽器直接在客戶端程序中接收消息,而不是在其處理程序中。細細是我想訪問(可執行)程序(基本上是一個主要方法的類)接收到的消息,創建一個新的客戶端對象,使用像定時器(或循環),將定期檢查新消息。

如果有人能幫我解決這個問題,我將不勝感激。或者至少告訴我,如果它甚至可能與netty。

回答

1

您正在尋找將netty的基於事件的模型轉換爲輪詢模型。一個簡單的方法來做到這一點是創建一個消息隊列:

//import java.util.concurrent.BlockingQueue; 
//import java.util.concurrent.LinkedBlockingQueue; 
BlockingQueue queue = new LinkedBlockingQueue(); 

你需要讓現有的隊列處理程序的構造函數的參數,當消息到達你把它放入隊列:

// Your netty handler: 
queue.put(message); 

在客戶端,您可以查詢隊列中的消息:

// The polling loop in your program: 
message = queue.poll(5, TimeUnit.SECONDS); 

BlockingQueue爲您提供等待消息的到達之間的選擇(take()),等待一定的時間消息到達(poll(long, TimeUnit)),或者僅僅檢查是否有任何消息可用(poll())。

從設計的角度來看,這種方法殺死了netty應該給你的非阻塞IO優勢。您可以使用正常的Socket連接獲得相同的淨結果。

+0

thx。這基本上是我現在實施的。儘管你的權利,它殺死我需要使用它atm的優勢(因爲我不想實施一些進一步的消息處理) – c3p0

相關問題