Rmi vs сервлеты против сокетов

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

Ответы

Ответ 1

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

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

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

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

Вкратце:

  • Сокеты для низкоуровневой сетевой связи
  • RMI предназначен для высокоуровневых распределенных вычислений Java-Java.
  • Сервлеты предназначены для реализации веб-сайтов и веб-сервисов.

Ответ 2

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

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

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

Ответ 3

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

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

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