Стандарт Java для связи клиент / сервер - PullRequest
7 голосов
/ 19 января 2011

Что такое «официальный» Java API для связи клиент / сервер или P2P?Java RMI?Какой-то другой сетевой API ??

Является ли это официальным сетевым API стандартом для и SE, и EE?

Я уверен, что ответочень зависящий от контекста, поэтому давайте рассмотрим несколько примеров:

  1. У вас есть 2 свинг-клиента, установленных на 2 компьютерах и подключенных к одной сети (или Интернету), и вы хотите любой изони должны отправить другому примитиву, такому как целое число 4, или некоторый POJO, например объект "Widget"
  2. То же, что и # 1 выше, но между клиентом Swing и полностью совместимым бэк-конец (реализация управляемых bean-компонентов, серверов приложений, всего девять ярдов)

Я не имею в виду конкретное приложение, мне просто интересно, каковы "нормы" для клиента-клиента иклиент-серверное общение в мире Java.

Ответы [ 5 ]

3 голосов
/ 19 января 2011

Если связывание с Java не является проблемой, RMI является довольно абстрактным решением, когда речь идет о решении обмена данными между клиентом и сервером (особенно когда данные представляют собой классы Java, что может быть трудным / слишком большим усилием дляпредставлять как текстовые данные).Просто убедитесь, что ваш объект реализует Serializable, и почти все может быть передано по проводам.

Если это не соответствует вашим требованиям, и вы хотите отказаться от необработанных сетевых вещей, клиент-серверная структура сокетов Netty - довольно хороший выбор.

1 голос
/ 19 января 2011

В J2SE нет такого понятия, как самый официальный сетевой API-интерфейс, все API-интерфейсы J2SE являются официальными в том смысле, что они поддерживаются Sun (сейчас Oracle).
Тем не менее, вы должны выбрать свой API на основе следующих критериев:

  • Знаете ли вы (или ваша команда), как использовать определенный API;
  • Насколько простым / сложным является использование этого API;
  • К какой пропускной способности вы стремитесь? Для приложений, чувствительных к производительности, вы можете быть вынуждены использовать двоичный протокол. В остальных случаях вы можете использовать текстовый протокол.

Например, между двумя клиентами будет достаточно простого текстового протокола для передачи POJO, например, с использованием буферов протокола Apache MINA или Google.
Это будет работать и между клиентом и сервером.


Ответ на вопросы Зака ​​в комментарии:

  1. Повышение производительности двоичных протоколов происходит из-за того, что вам не нужно преобразовывать все в текстовую форму и обратно - вы просто можете передать двоичное представление памяти вашего приложения с минимальными изменениями, как, например, в случае API BSD Sockets, преобразование от порядка байтов хоста к порядку байтов сети. К сожалению, я не знаю подробностей о том, как сериализация RMI / Java обрабатывает объекты, но я уверен, что это все еще намного быстрее, чем передача всех данных в читаемой форме;
  2. Да, у MINA и буферов протокола есть API-интерфейсы Java. Они просто не входят в комплект Java SE, их нужно загружать отдельно. Кстати, MINA может использовать как двоичную, так и читаемую сериализацию, в зависимости от того, как вы ее используете.
  3. Вы должны как-то определить понятие «хорошо», например, отвечая на вопросы, которые я упоминал выше. Если вы хотите использовать объекты по сети, используйте RMI. Если вы этого не сделаете, подойдет Netty или MINA, что бы вам ни было легче освоить.
0 голосов
/ 19 января 2011

rmi - это в значительной степени стандартный протокол java-java.он встроен и очень прост в использовании.большинство бэкэндов j2ee также общаются с помощью rmi, хотя это не единственная возможность.

0 голосов
/ 19 января 2011

J2SE, наиболее распространенным является, вероятно, RMI или необработанные сокеты.

J2EE использует шину обмена сообщениями, на которую подписывается каждый (серверы и клиенты), которая довольно сильно отличается от решений в стиле rmi (хотя на самом низком уровне реализацияможет все еще полагаться на RMI).Это помогает автоматизировать резервирование и аварийное переключение.Если вам нужна эта функциональность, я думаю, что она может быть использована и в SE.

Я давно не использовал J2EE, так что это могло измениться, но я сомневаюсь в этом.Система обмена сообщениями была ключевым компонентом J2EE.

0 голосов
/ 19 января 2011

Для P2P Солнце в одной точке толкнуло JXTA довольно сильно.

Я бы не посмел использовать RMI для связи P2P.

...