2011-04-27 2 views
13

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

ответ

27

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

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

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

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

Вкратце:

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

Мне нравится ответ, но я вышел неудовлетворенным. Я надеялся понять взаимосвязь между сервлетами и сокетами. Сервлеты зависят от сокетов. –

+0

@KatedralPillon - * «Сервлеты зависят от сокетов». * - На уровне API нет. При реализации, возможно, да. Вы могли бы (теоретически) внедрить сервлеты без использования API 'Socket', если бы ваши сервлеты обменивались исключительно с клиентами на хосте или реализовали свой собственный эквивалент функции' Socket'; например в собственном коде. –

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

  2. RMI - обрабатывает все выше, < личного мнения> его один из худшего API, чтобы загрязнить норматив, Java </личного мнения>, достаточно просто программу, обрабатывает основные сетевые ошибки, проверку подлинности и вопросы безопасности , Трудно настроить и развернуть.

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

+2

Оправьте свое мнение – Pacerier

+2

Это мое мнение. Я знаю, что некоторые люди просто любят RMI, но я считаю, что есть слишком много классов и интерфейсов, его PITA для отладки и API поощряет стиль кодирования с помощью нескольких вызовов методов по сети, которая умирает при развертывании в реальной сети. Все, с чем можно было бы жить, но проблемы с развертыванием - это просто пробковая пробка. Классы клиентов и серверов должны совпадать точно после того, как вы пройдете мимо 100 клиентских машин, управление которыми невозможно. –

+1

Ваше мнение, хотя без сомнения, развлекает, не отвечает на вопрос, и проблема «шоу-стоппер», которую вы упомянули, недействительна. – EJP

2

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

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

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