Ответ 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.
- Сервлеты предназначены для реализации веб-сайтов и веб-сервисов.