RMI против сервлетов против сокетов - PullRequest
15 голосов
/ 27 апреля 2011

в чем разница между программированием сокетов, rmi и сервлетами. Когда использовать что?

Ответы [ 3 ]

30 голосов
/ 27 апреля 2011

Socket APIs - это низкоуровневая (транспортная) абстракция, с помощью которой Java-приложение взаимодействует с сетью и, соответственно, с удаленными клиентами и службами.Сокеты и связанные API поддерживают надежный поток байтов и ненадежные службы обмена сообщениями.Обычно они используются для TCP / IP и UDP / IP, хотя могут поддерживаться и другие стеки сетевых протоколов (по крайней мере, теоретически).

RMI - это семейство каркасов и протоколов для реализации сетей уровня приложений между приложениями Java,Он моделирует сетевые взаимодействия как вызовы методов Java, сделанные для объектов, которые живут в других приложениях.Эта модель требует механизма (обычно сервера имен), который позволяет одному приложению «публиковать» объекты, чтобы другое приложение могло ссылаться на них.Это (и тот факт, что порты RMI обычно блокируются по умолчанию) означает, что при настройке приложений на основе RMI нетривиальных усилий по настройке.

Сервлеты - это набор API, которые в первую очередь предназначен для реализации серверной части HTTP-коммуникаций;т.е. для создания веб-серверов в Java.Они (или, точнее, веб-контейнер, в котором они работают) заботятся о деталях протокола HTTP, так что программисту (в теории) нужно только заниматься проблемами «приложений».

На практике,разработчик и / или разработчик сервлетов должен заниматься другими вещами, такими как сопоставление URL-адресов с сервлетами объектам, безопасность и аутентификация.Кроме того, сервлеты имеют дело только с серверной стороной HTTP-взаимодействия ... клиентская сторона должна обрабатываться разными API.(Можно также утверждать, что сами по себе сервлеты не делают достаточно, о чем свидетельствует распространение сред веб-приложений, построенных на основе сервлетов.)

Вкратце:

  • Сокеты предназначены для низкоуровневого сетевого взаимодействия
  • RMI предназначен для высокоуровневых распределенных вычислений Java-Java
  • Сервлеты предназначены для реализации веб-сайтов и веб-служб
6 голосов
/ 27 апреля 2011
  1. Сокеты - несколько простых вызовов, которые напрямую взаимодействуют с TCP / IP. Очень просто, но вы можете сами управлять обработкой буфера и справляться с неполными ответами и таймаутами в себе. Нет аутентификации или безопасности.

  2. rmi - обрабатывает все вышеперечисленное, <личное мнение> - один из худших API-интерфейсов, который испортил стандарты Java </ personal мнение>, довольно прост в программировании, обрабатывает основные сетевые ошибки, аутентификацию и безопасность проблемы. Сложно настроить и развернуть.

  3. Сервлеты - прекрасный простой API, все сетевые проблемы решаются за вас, безопасность и аутентификация с помощью плагинов. Нет проблем с развертыванием, простая настройка.

2 голосов
/ 27 апреля 2011

Используйте сокеты для реализации определенного протокола TCP / IP, будь то существующий стандарт или собственный протокол. Вы имеете полный контроль над всеми аспектами сетевого взаимодействия.

Сервлеты поддерживают семантику запросов / ответов в общем смысле, но гораздо более вероятно, что вы будете использовать HTTPServlets, которые, как и ожидалось, поддерживают семантику запросов / ответов HTTP. Например, веб-сервер или конечная точка на основе RESTful HTTP.

Использовать RMI для распределенных объектов Java. RMI сама реализована с использованием сокетов (см. Выше) и реализует протокол Java Wire.

...