Использование буферов протокола в Java EE? - PullRequest
0 голосов
/ 27 апреля 2010

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 ноября 2012

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

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

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

0 голосов
/ 27 апреля 2010

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

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

...