Какой протокол я должен использовать для быстрого взаимодействия команд / ответов? - PullRequest
3 голосов
/ 21 июня 2009

Мне нужно настроить протокол для быстрого взаимодействия команда / ответ. Мой инстинкт подсказывает мне просто собрать простой протокол с разделенными CRLF строками ascii, например, как работает SMTP или POP3, и туннелировать его через SSH / SSL, если мне нужно обеспечить его безопасность.

Хотя я мог бы просто сделать это, я бы предпочел опираться на существующую технологию, чтобы люди могли использовать дружественную библиотеку, а не интерфейс библиотеки сокетов, который им предоставляет ОС.

Мне нужно ...

  • Команды и ответы, передающие структурированные данные туда и обратно. (XML, S выражения, все равно.)
  • Возможность для сервера отправлять внеплановые уведомления клиенту без опроса.

Есть идеи, пожалуйста?

Ответы [ 4 ]

2 голосов
/ 21 июня 2009

Если вы просто хотите запрос / ответ, HTTP очень прост. Это уже протокол запроса / ответа. Клиентская и серверная части широко реализованы на большинстве языков. Масштабирование это хорошо понятно.

Самый простой способ его использования - отправлять команды серверу в виде запросов POST, а сервер отправлять ответ в теле ответа. Вы также можете расширить HTTP своими собственными глаголами, но это увеличит эффективность использования кэширующих прокси и другой инфраструктуры, которая понимает HTTP.

Если вам нужны асинхронные уведомления, посмотрите на протоколы pub / sub (реализации Spread, XMPP, AMQP, JMS или коммерческие брокеры pub / sub сообщений, такие как TibcoRV, Tibco EMS или Websphere MQ). Выбор протокола или реализации зависит от надежности, задержки и пропускной способности системы, которую вы строите. Например, нормально ли удалять уведомления, когда сеть перегружена? Что происходит с уведомлениями, когда клиент находится в автономном режиме - они отбрасываются или помещаются в очередь на случай повторного подключения клиента.

1 голос
/ 21 июня 2009

Как насчет SNMP? Я не уверен, подходит ли он именно той модели, которую использует ваше приложение, но он поддерживает как асинхронное уведомление, так и извлечение (т. Е. TRAP и GET).

1 голос
/ 21 июня 2009

AMQP звучит многообещающе. В качестве альтернативы, я думаю, что XMPP поддерживает многое из того, что вы хотите, хотя и с некоторыми накладными расходами.

Тем не менее, в зависимости от того, что вы пытаетесь выполнить, простой специальный протокол может быть проще.

0 голосов
/ 09 марта 2013

Это отличный вопрос с огромным количеством переменных, которые нужно учитывать, и в этом вопросе упоминается только несколько из них: формат пакета, асинхронный и синхронизированный обмен сообщениями и безопасность. Есть много, много других, о которых можно подумать. Я предлагаю пройти через описание стека 7-уровневого протокола (OSI / ISO) и спросить себя, что вам нужно на этих уровнях, и хотите ли вы создать этот уровень или получить его откуда-то еще. (Вы, кажется, в основном интересуетесь слоями 6 и 7, но также упоминали биты нижних уровней.)

Подумайте также о том, относится ли это к критически важным для безопасности приложениям или является частью системы с формальным V & V. Действительно хорошие, заслуживающие доверия системы связи нелегко спроектировать; также «недостаточно мощный» протокол может значительно увеличить нагрузку на код приложения для восстановления после ошибок.

Наконец, я бы посоветовал посмотреть, как другие приложения, аналогичные вашим, справляются с работой (проверяют открытый исходный код, читают книги и т. Д.). Также полезна база данных Патентного ведомства США и т. Д .; можно получить прекрасные идеи, просто прочитав описание проблемы общения, которую они пытались решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...