2012-08-24 53 views
1

我正在尋找一些使用Netty實現測驗服務器的理論建議。服務器的三個主要要求是:使用Netty的應用程序設計

  • 服務器是權威的,並控制測驗的進度。例如,用戶註冊參加測驗(如房間/大堂)。一旦準備就緒後,服務器會在問題完成後繼續前進,並在一段時間過後或者每個人都回答後進入下一個問題。

  • 用戶有十秒鐘來回答問題。他們花時間回答這個問題以及他們剩餘的時間對於測驗很重要。參加測驗的用戶將在地理上多樣化(即通過WAN鏈接)。

  • 它必須是可伸縮的,例如,一個測驗可能有十個問題和三十個用戶,而下一個可能有一百個問題和一萬個用戶。

Netty會是一個合適的解決方案嗎? Netty有沒有好的書?我無法在亞馬遜上看到任何Kindle書籍。任何人都可以提供關於第二點的任何建議或樣本(特別是時間關鍵的客戶端/服務器示例,需要延遲/傳輸時間進入帳戶)?

回答

3

不幸的是,我不知道任何關於netty的書,但是在線文檔以及JavaDocs和示例都很不錯。這裏有一些示例:

  • 如果要爲數千個併發用戶/連接提供服務,則非阻塞I/O是您的唯一選擇。 Java(和OS)不會有效處理數千個線程,這是阻止I/O所需的。 netty可以在不創建多個線程的情況下運行。

  • netty與底層協議(TCP/IP或UDP)一樣好。您無法解決網絡延遲問題。例如。從美國發往歐洲的數據包大約需要150毫秒。如果時序如此重要,您可能需要以某種方式同步時鐘或使用中央時間源。退房

  • 你必須確定你的協議將如何與服務器交互:

    • 短請求/響應的連接,建立用戶每次要上傳的問題或得到新的 - 想。這將非常緩慢,但相當可靠(您不必擔心長時間連接被中斷)

    • 爲每個用戶建立一個連接,持續整個測驗。這將盡量減少延遲,但您必須處理斷開連接並手動重新連接。

    • 混合方法 - 選擇協議與Keep-alive選項

  • 在網狀

    ,避免字節數組(ChannelBuffer/ByteBuf在那個相當不錯的),併產生過多的垃圾複製

  • 避免阻塞netty工作線程中的I/O操作。監視使用多少工作線程,避免排隊處理netty事件。

+0

感謝Tomasz,這給了我一些繼續。 –