Как сделать простой, надежный сетевой обмен сообщениями? - PullRequest
1 голос
/ 21 января 2012

Я сейчас использую сокеты для связи между различными процессами.Все работает на одном компьютере, поэтому нет потери пакетов, и я также не получаю тайм-ауты чтения и т. Д. Сообщения, как правило, представляют собой небольшие блоки данных (JSON, иногда двоичные.) Теперь я хочу сделать межмашинное взаимодействие,Соединение клиент / сервер обычно выглядит следующим образом: клиент говорит серверу начать некоторую обработку (передавая описание задачи), сервер выполняет работу и сообщает о ходе выполнения, и клиент может дополнительно отправить промежуточное сообщение между ними.После завершения сервер продолжает прослушивать, пока клиент полностью отключен (т. Е. Сеанс завершен, запуск нового задания начинает новый сеанс).

Как мне реализовать связь?Я могу легко продолжать использовать сокеты по сети, но, насколько я понимаю, мне теперь нужно добавить множество обработчиков ошибок, чтобы определить, когда сообщение не дошло, и сообщить об этом каким-либо образом на сервер.Все, что я хочу, это просто send(message, target) и будьте уверены, что полное сообщение будет передано;плюс некоторое уведомление, когда другая сторона мертва.Я видел, что есть несколько библиотек, таких как zero-mq, которые утверждают, что делают именно это, но также и намного больше, и я не уверен, действительно ли необходима такая библиотека сообщений.Есть ли какая-нибудь простая в использовании библиотека для базовых коммуникаций?

Я использую C ++ и Python, и BSD-стиль определенно сильно предпочтителен для библиотек.Библиотека также должна быть достаточно стабильной, так как в части коммуникации нет ничего особенно важного, и я хотел бы придерживаться одного решения.

Ответы [ 4 ]

2 голосов
/ 21 января 2012

Вы должны проверить ZeroMQ .Он имеет более простой интерфейс, чем чистые разъемы BSD, более переносим и имеет превосходную документацию.

2 голосов
/ 21 января 2012

TCP гарантирует, что все pagackes будут отправлены в пункт назначения [Он выполнит повторную отправку для вас, если не сделал этого].Итак, если вы используете его - это, вероятно, займет больше времени [по сравнению с одной машиной], но правильность передачи сообщений остается.

0 голосов
/ 21 января 2012

Похоже, вам нужна очередь сообщений.

Существует много, много решений, из которых только одно - redis: http://redis.io

0 голосов
/ 21 января 2012

Оформление заказа networkComms.net для библиотеки связи с открытым исходным кодом.

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