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

StackOverflow https://stackoverflow.com/questions/1024403

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

Мне нужно...

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

Пожалуйста, есть какие-нибудь идеи?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top