Хобрук: Ваш путь к мастерству в программировании

Неблокирующая схема запроса-ответа (ZeroMQ)

Я обмениваюсь сообщениями между двумя машинами, используя сокеты ZeroMQ, по схеме запрос-ответ. Этот обмен осуществляется с помощью программы C с некоторыми другими функциями.

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

Я пробовал использовать:

zmq_recv (requester, buffer, 256, ZMQ_DONTWAIT);

но инициатор запроса сразу же возвращается, потому что в его очереди нет сообщения (очевидно).

Есть ли способ иметь в ZeroMQ неблокирующую схему запроса-ответа? Что-то вроде: «если сообщение не было получено в течение 1 секунды, вернуть».

16.11.2019

Ответы:


1

Функция: select() имеет параметр «тайм-аут», который можно установить равным 1 секунде. Затем select() возвращается, когда один из выбранных файловых дескрипторов нуждается в обслуживании -ИЛИ- по истечении 1 секунды. Предлагаем прочитать страницу MAN для select() для получения подробной информации

16.11.2019
  • в C API нет select (). Я полагаю, вы говорите о zmq_poll (), у которой есть аргумент тайм-аута. Однако когда я тестирую код: while (1) { zmq_pollitem_t items [] = {{ requester, 0, ZMQ_POLLIN, 0 }}; zmq_poll (items, 1, 1); if (items[0].revents & ZMQ_POLLIN) { int size = zmq_recv (requester, buffer, 4, 0); } } сообщение не получено, поэтому я разместил этот вопрос. 16.11.2019
  • фактически select() является частью C API. выберите страницу MAN 17.11.2019
  • Новые материалы

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..