2009-04-09 2 views
4

Я планирую писать RPC-сервер в Java. Сервер должен принимать входящие RPC - возможно, через HTTP - и отвечать на них. Достаточно простой материал. Поддержка «длинных опросов» или «зависаний» RPC не требуется, поэтому модель с потоком за запрос должна быть абсолютно адекватной.Framework для сервера RPC Java

Если бы я писал это на Python, я бы, вероятно, использовал фреймворк, подобный скрученному. В C что-то вроде glibc. В каждом случае структура обеспечивает реализацию основного ядра «выбора цикла» обработки IO и вызова конструкций более высокого уровня, которые его обрабатывают, что в конечном итоге приводит к тому, что мое приложение вызывается для таких событий, как получение RPC.

Давно не было написано ничего существенного на Java, поэтому я не знаю, что такое современное состояние или предлагаемые решения для такого рода вещей. Возможно, есть даже части стандартной библиотеки, которую я могу легко использовать для этого. Поэтому мой вопрос к StackOverflow: какие рамки существуют там, которые подходят для такой задачи?

Обратите внимание, что хотя я могу использовать HTTP для RPC, это не является веб-приложением, и поэтому веб-инфраструктура не подходит.

ответ

4

Apache MINA - очень хорошо разработанная асинхронная неблокирующая сетевая инфраструктура. Он обеспечивает байт-ориентированный доступ к чтению и записи пакетных данных. Построение поверх того, что у него есть фильтрационная система, в которую могут быть добавлены дополнительные слои, обеспечивающие такие вещи, как синтаксический анализ строк, шифрование (через TLS), сжатие и т. Д.

PS: Рекомендуется серия выпуска 2.0, хотя он все еще находится в форме «веха», он оказался очень стабильным и близится к окончательному выпуску.

+0

Это выглядит отлично. Я буду отмечать это как «ответ», если кто-то придумает что-то еще лучше. ;) –

+0

Один вопрос: HTTP-пример, который они предоставляют, реализует сам протокол HTTP, и API, похоже, содержит поддержку проксирования HTTP. Вы знаете, есть ли встроенная или хорошо используемая библиотека MINA для обработки HTTP-запросов? –

+0

@Arachnid AsyncWeb (http://mina.apache.org/asyncweb/) - это уровень HTTP, построенный поверх MINA. Хотя, если вы действительно используете этот протокол RPC через HTTP-запросы, вам может быть лучше просто написать сервлет и разместить его в любом из контейнеров веб-приложений. –

2

У вас есть множественный выбор:

  • рулонных собственное решение с существующим SDK для программирования сокетов.
  • Java RMI, структура вызова метода удаленного метода.
  • Связывание Java CORBA, больше не считается текущим.
  • Рамки веб-сервисов Java, являются довольно сложными. Посмотрите на Apache CXF и различные продукты J2EE.

Тогда у вас есть разные системы, работающие над HTTP-транспортом, такие как JSON/XML-RPC, где вам нужен веб-сервер. Даже если вы их исключаете.

+0

Почему для использования JSON или XML требуется веб-сервер? –

+0

У меня уже есть (большинство) формат проводов RPC для меня, поэтому я не ищу RPC-библиотеку per-se - просто общую структуру сетевого программирования. –

+0

@tweakt вы правы. Я специально думал о JSON через HTTP или XML через HTTP. Вот почему... – Pierre

3

Вы можете подумать о том, чтобы использовать что-то простое, как Jetty Внутренние элементы причала очень стабильны и могут обрабатывать довольно глупые числа соединений. Если вы реализуете специфический интерфейс обработчика Jetty, вы также можете использовать все библиотеки поддержки сервлета и JSP, что делает его довольно небольшим встроенным сервером приложений.

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