2010-04-27 26 views
0

我編寫了一個在Java中使用Protocol Buffers的服務器。客戶使用PB進行交談。 我想將服務器代碼遷移到Java EE,並利用容器的內置功能(如集羣)。在Java EE中使用協議緩衝區?

如何獲得接收PB消息並正確解釋它們的服務,然後處理它們?

我正在考慮一種專用的servlet類型,但是怎麼做呢?

我是Java EE新手。我對Java EE應用服務器不太瞭解,不知道是否有辦法做到這一點。

P.S.我正在尋找直接使用TLS套接字的解決方案。這裏沒有像HTTP這樣的造成開銷的中間人協議。

P.P.S.請只提供開源解決方案。

回答

0

如果你看看servlet類,他們建議應該可以構建任何類型的支持任何類型協議的servlet,而不僅僅是HTTP(你會認爲應該可以創建自己的類型的延伸GenericServlet的servlet,就像HttpServlet一樣)。

但是,實際上這是不可能的,因爲您運行它的Java EE服務器很可能只支持標準的HTTP servlet。沒有標準的方法可以讓Java EE服務器支持其他類型協議的servlet。所以試圖編寫自己的協議特定的servlet是不行的。

+0

很好:( 那麼,怎麼走呢? – malaverdiere 2010-04-27 12:01:55

+0

我在看JBoss綁定文件,看起來他們有很多像RMI這樣的服務,不會使用HTTP。 – malaverdiere 2010-04-29 11:14:25

+0

但是,它使用RMI,就像HTTP一樣......您似乎在尋找的是一種在套接字上進行偵聽的方式,以及客戶端打開連接時自行處理所有數據通信的方式。你不希望像RMI這樣的其他協議坐在中間,也許JBoss有一種方法來插入一個套接字監聽器(搜索JBoss文檔),但它當然不是標準的Java EE功能。 – Jesper 2010-04-29 11:47:11

0

不幸的是,Java EE沒有提供將新協議添加到服務器的標準方式。

它提供的一件事是能夠通過Java Connector Architecture打開ServerSocket。 JCA相當複雜,但幸運的是,馬克傑弗裏先生已經寫了一個名爲JCA Sockets的連接器,它提供了一個簡單的通用方法來完成此操作。使用它,您可以編寫message-driven beans,每當與您的ServerSocket建立連接並將生成的Socket傳遞給它們時,就會調用該文件;然後你可以做任何你需要解碼並處理protobuf消息。

如果您不喜歡這樣做,您可以直接打開ServerSocket。這違反了Java EE規則,但大多數容器都可以讓你擺脫困境。