2010-04-27 3 views
0

Я закодировал сервер, который использует протокольные буферы в Java. Клиент разговаривает с ним с помощью PB. Я хотел бы перенести код сервера на Java EE и воспользоваться встроенными функциями контейнеров, такими как кластеризация.Использование буферов протокола в Java EE?

Как я могу получить услугу, которая получает сообщения PB и правильно их интерпретирует, а затем обрабатывает их?

Я думал о специальном сервлете, но как это можно сделать?

Я новичок в Java EE. Я недостаточно знаком с серверами приложений Java EE, чтобы узнать, есть ли способ сделать это.

P.S. Я ищу решение, которое напрямую использует TLS-сокеты. Здесь нет приветственных протоколов посредника, таких как HTTP.

P.P.S. Только с открытым исходным кодом.

ответ

0

Если вы посмотрите на классы сервлетов, они предполагают, что должно быть возможно создать любой сервлет, поддерживающий любой протокол, а не только HTTP (вы можете подумать, что можно создать свой собственный вид сервлета, который расширяет GenericServlet, точно так же, как HttpServlet делает).

Однако на практике это невозможно, так как сервер Java EE, на котором вы его запускаете, скорее всего, поддерживает только стандартные HTTP-сервлеты. Нет стандартного способа заставить серверы Java EE поддерживать сервлеты для других видов протоколов. Таким образом, попытка написать собственный сервлет, специфичный для протокола, - это не путь.

+0

большой :( Итак, что бы путь? – malaverdiere

+0

Я смотрю на привязок файл JBoss, и, похоже, у них есть много услуг, таких как RMI, что не будет использовать HTTP. Может не так быть использованным? – malaverdiere

+0

Но это использует RMI, который является еще одним протоколом, точно так же, как HTTP ... То, что вы, похоже, ищете, - это способ прослушивания сокета, а когда клиент открывает соединение, обрабатывайте всю передачу данных самостоятельно. Вам не нужен другой протокол, например, RMI. Возможно, у JBoss есть способ подключить прослушиватель сокетов (искать документы JBoss), но это, безусловно, не стандартная функциональность Java EE. – Jesper

0

К сожалению, Java EE не предлагает стандартный способ добавления новых протоколов на серверы.

Единственная вещь, которую он предлагает, это возможность открыть ServerSocket с помощью Java Connector Architecture. JCA довольно сложна, но, к счастью, г-н Марк Джеффри написал коннектор под названием JCA Sockets, который предоставляет простой, общий способ сделать это. Используя это, вы можете написать message-driven beans, которые вызывается всякий раз, когда вы подключаетесь к вашему ServerSocket, и которые передают в них Socket; вы можете делать все, что вам нужно, чтобы декодировать и обрабатывать сообщение protobuf.

Если вы этого не хотите, вы можете просто открыть ServerSocket напрямую. Это нарушает правила Java EE, но большинство контейнеров позволят вам с ним справиться.

Смежные вопросы