В чем разница между программированием сокетов, rmi и сервлетами. Когда использовать что?rmi vs servlets vs socket
ответ
сокет API, являются низкого уровня (транспортный уровень) абстракции, с помощью которого приложение Java взаимодействует с сетью, и расширением с удаленными клиентами и услуг. Сокет и связанные с ним API поддерживают надежный поток байтов и ненадежные службы обмена сообщениями. Они обычно используются для TCP/IP и UDP/IP, хотя другие сетевые протокольные стеки могут (по крайней мере теоретически) поддерживаться.
RMI - это семейство фреймворков и протоколов для реализации приложений на уровне приложений между приложениями Java. Он моделирует сетевые взаимодействия как вызовы методов Java, выполненные против объектов, которые живут в других приложениях. Эта модель требует механизма (обычно это сервер имен), который позволяет одному приложению «публиковать» объекты, чтобы другое приложение могло ссылаться на них. Это (и тот факт, что порты RMI обычно блокируются по умолчанию) означает, что при настройке приложений на основе RMI существует нетривиальное количество усилий по настройке.
Сервлеты - это набор API, которые являются главным образом, предназначенные для реализации серверной части HTTP-сообщений; т. е. для создания веб-серверов в Java. Они (или, точнее, веб-контейнер, в котором они работают) заботятся о деталях протокола HTTP, так что программисту (теоретически) нужно только учитывать проблемы «приложения».
На практике разработчик и/или развертыватель сервлетов должен иметь дело с другими вещами, такими как сопоставление URL-адресов сервлетам с объектами, безопасность и аутентификация. Кроме того, Servlets имеют дело только с серверной частью HTTP-взаимодействия ... на стороне клиента должны обрабатываться различные API. (Можно также утверждать, что сервлеты сами по себе не делают достаточно, о чем свидетельствует распространение рамки веб-приложений, которые построены на вершине сервлетов.)
Вкратце:
- Розетки для низко- сетевой уровень связи
- RMI для высокого уровня Java-на-Java распределенных вычислений
- сервлетов для реализации веб-сайтов и веб-сервисы
Сокеты - несколько простых вызовов, которые непосредственно взаимодействуют с TCP/IP. Очень просто, но вы должны внедрить свою собственную обработку буфера и иметь дело с неполными ответами и тайм-аутами в себе. Нет аутентификации или безопасности.
RMI - обрабатывает все выше, < личного мнения> его один из худшего API, чтобы загрязнить норматив, Java </личного мнения>, достаточно просто программу, обрабатывает основные сетевые ошибки, проверку подлинности и вопросы безопасности , Трудно настроить и развернуть.
Сервлеты - прекрасный простой API, все проблемы с сетью, обработанные для вас, безопасность и аутентификация через плагины. Нет проблем с развертыванием, простой настройкой.
Оправьте свое мнение – Pacerier
Это мое мнение. Я знаю, что некоторые люди просто любят RMI, но я считаю, что есть слишком много классов и интерфейсов, его PITA для отладки и API поощряет стиль кодирования с помощью нескольких вызовов методов по сети, которая умирает при развертывании в реальной сети. Все, с чем можно было бы жить, но проблемы с развертыванием - это просто пробковая пробка. Классы клиентов и серверов должны совпадать точно после того, как вы пройдете мимо 100 клиентских машин, управление которыми невозможно. –
Ваше мнение, хотя без сомнения, развлекает, не отвечает на вопрос, и проблема «шоу-стоппер», которую вы упомянули, недействительна. – EJP
Используйте сокет s для реализации определенного протокола TCP/IP, будь то существующий стандарт или собственный собственный протокол. Вы полностью контролируете все аспекты сетевой коммуникации.
Сервлеты поддерживают запрос/ответную семантику в общем смысле, но гораздо более вероятно, что вы будете использовать HTTPServlets, которые поддерживают, как и ожидалось, семантику HTTP-запроса/ответа. Например, веб-сервер или конечная точка на основе HTTP RESTful.
Использование RMI для распределенных объектов Java. Сама RMI реализована с использованием Sockets (см. Выше) и реализует протокол Java Wire.
- 1. POSIX socket VS Web Socket VS Windows TCP/IP Socket
- 2. webservices vs RMI/RPC
- 3. RMI VS AppDynamics
- 4. App Engine - RequestFactory vs servlets vs other aproaches
- 5. XMLHttpRequest vs Socket vs some other approach
- 6. Asynchronous vs synchronoous socket
- 7. ActionScript Socket vs WebSocket
- 8. socket connect() vs bind()
- 9. Socket vs Wcf communication
- 10. Socket heartbeat vs keepalive
- 11. bind vs SO_BINDTODEVICE socket
- 12. JMeter - RMI vs SSH tunneling
- 13. Java: RMI vs Web Services
- 14. C# socket vs C++ Socket, что лучше?
- 15. Socket in node.js vs socket в Dart
- 16. Порт vs socket для redis
- 17. TCPClient vs Socket in C#
- 18. GAE Channel Api vs Socket
- 19. GCM vs. Socket in android
- 20. Socket program Python vs C++ (Winsock)
- 21. TcpClient VS Socket при большой передаче файлов
- 22. Acknowlegement vs Emit in Socket IO
- 23. local vs remote socket connections на iphone
- 24. Python Socket Send Buffer Vs. Str
- 25. Bonjour (IPP) vs Jetdirect-Socket Printer
- 26. php socket server Local VS. онлайн vps
- 27. PHP Socket Server vs node.js: Веб-чат
- 28. C++ socket send/recv vs write/read
- 29. Создает ли встроенный VS VS VS VS 2010
- 30. FTP vs SFTP vs HDFS vs NTFS vs EXT2, EXT3
Мне нравится ответ, но я вышел неудовлетворенным. Я надеялся понять взаимосвязь между сервлетами и сокетами. Сервлеты зависят от сокетов. –
@KatedralPillon - * «Сервлеты зависят от сокетов». * - На уровне API нет. При реализации, возможно, да. Вы могли бы (теоретически) внедрить сервлеты без использования API 'Socket', если бы ваши сервлеты обменивались исключительно с клиентами на хосте или реализовали свой собственный эквивалент функции' Socket'; например в собственном коде. –