RMI vs сервлеты vs сокеты

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

3 ответов


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

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

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

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

вкратце:

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

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

  2. rmi -- обрабатывает все вышеперечисленное, его один из худших API, чтобы загрязнить стандарты java , довольно простой в программировании, обрабатывает основные сетевые ошибки, аутентификацию и вопрос безопасности. Трудно настроить и развернуть.

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


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

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

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