Как отправить только последнее сообщение на сервер с помощью NetMQ/ZeroMQ?

Я хочу отправить данные на сервер от клиента. Только последнее сообщение важно для сервера. Если сервер появляется после сбоя, я хочу, чтобы сервер получил только последнее сообщение от клиента.

Пока сервер не работает, я хочу, чтобы клиент продолжал обрабатывать и отправлять сообщения или, по крайней мере, помещать их в очередь (с длиной одного сообщения).

Я пытаюсь использовать для этого NetMQ/ZeroMQ. Как это сделать?

Спасибо!


person Erik Z    schedule 22.05.2015    source источник


Ответы (1)


Сначала используйте PubSub, где клиент является издателем, с PubSub вы будете получать сообщения только тогда, когда вы онлайн, если подписчик (сервер в вашем случае) не работает, он пропустил все сообщения (например, радио)

ZeroMQ также имеет функцию под названием Conflate (у NetMQ ее еще нет, вы можете ее портировать), взгляните на следующий вопрос:

ZeroMQ: я хочу Публикация – подпишитесь, чтобы отказаться от старых сообщений и заменить их новыми

Также описание conflate из документации ZeroMQ:

ZMQ_CONFLATE: Хранить только последнее сообщение. Если установлено, сокет должен хранить только одно сообщение в своей входящей/исходящей очереди, причем это сообщение будет последним полученным сообщением/последним отправленным сообщением. Игнорирует параметры «ZMQ_RCVHWM» и «ZMQ_SNDHWM». Не поддерживает сообщения, состоящие из нескольких частей, в частности, только одна часть хранится во внутренней очереди сокета.

person somdoron    schedule 22.05.2015