2013-02-02 55 views
-1

我正在嘗試編寫一個事件驅動的HTTP Web服務器。因爲我將只使用一個線程,所以事件必須排隊並異步處理(我也使用Java NIO)。但是,我只能堅持第一步。我已經打開ServerSocketChannel。我不確定在請求進入時如何獲得新的SocketChannel連接。是否有可以通過Java訪問的操作系統隊列? (我不確定Java是獨立於操作系統的)我不想使用任何阻塞調用。Java中的事件驅動服務器

如果我正在進行錯誤的方向,任何幫助,將不勝感激。

謝謝。

+2

你可能想看看Apache Mina:http://mina.apache.org/它是一個簡化套接字處理的項目,它們也有服務器和客戶端的例子他們的頁面。 – pabrantes

+0

爲什麼選擇投票,它是一個很好的高層次設計問題。 – Siddharth

+0

如果您使用的是NIO,則根本沒有使用ServerSockets和套接字。沒有事先研究的真實證據。不是一個真正的問題。 @Siddharth正如現在所說,它根本不是一個「高水平的設計問題」,這是一個自相矛盾的問題。 – EJP

回答

0

您需要:

  • 創建一個選擇
  • 放的ServerSocketChannel成非阻塞模式
  • 使用OP_ACCEPT
  • 寫一個select()循環,選擇註冊SSC其您將在NIO教程中找到

在select()循環中,您將找到其中的isAcceptable()返回true:這意味着您需要調用ServerSocketChannel.accept()來接受連接。返回SocketChannel,然後您必須進入非阻塞模式並註冊OP_READ

反過來,這將導致針對isReadable()返回true鍵:這意味着你應該閱讀有關SocketChannel.

你會發現在NIO教程的這個例子。它比這更復雜;-)