2011-02-25 26 views
1

我正在考慮將我的Java NIO實現移至JBoss Netty,因爲它提供了比我實現的更清潔的模型。該實現使用專有協議通過TCP管理多個客戶端與組件的連接。我執行JBoss Netty中靈活的超時機制?

一個方面,我不能Netty中看到的,是任意設置超時,其中的能力:從組件讀

  1. 等待一些數據。我知道Netty有ReadTimeoutHandler,但是組件在移動通過狀態機時可以很容易地更改/關閉超時值?
  2. 等待時間過去,以便我可以重新連接到組件(以使組件時間在斷開連接後重新啓動)。這與通信完全無關,並且是一個簡單的超時,但是我希望超時「事件/異常」以與其他通信相關超時相同的方式呈現給處理程序類。

可以使用Netty完成這個超時機制嗎?

結論:鑑於我需要實現一個超時機制,它將在自己的線程內運行,我不會轉換爲使用Netty畢竟。

+0

你正在實施什麼樣的通道,服務器或客戶端? – secmask

+0

你的意思是「處理」,而不是「處理程序」... – someguy

+1

@someguy:不,我使用術語處理程序來處理「代表」我正在與之通信的組件。 @secmask:它們是多個組件的客戶端連接。 – trojanfoe

回答

3

請參閱ChannelConfig。方法setConnectTimeoutMillis(int)以毫秒爲單位設置超時。您可以調用setOption(String, Object)通過Bootstrap實例調用此方法。 name將是「connectTimeoutMillis」,並且value將是期望的以毫秒爲單位的超時。

以下片段顯示瞭如何將連接超時設置爲5000毫秒(5秒)。

ClientBootstrap bootstrap... // bootstrap instance 
bootstrap.setOption("connectTimeoutMillis", 5000); 
+0

非常感謝 - 但是(我想我不清楚) - 我使用超時值來節制重新連接。這種情況是連接關閉,我想讓組件在連接之前有機會重新啓動。你描述的方法會滿足這個條件嗎? – trojanfoe

+0

@trojanfoe在這種情況下,就我所知,你必須自己實現類似的東西。至於你的新問題的第一部分,我認爲你將不得不使用不同的'ReadTimeoutHandler'。我想你會爲每個「狀態」有不同的實例。 – someguy

+0

好的,謝謝。是,每個狀態的超時值都會更改。 – trojanfoe