Q : ZMQ Context
is не отправляет данные из браузера / PHP
Со всемиуважение к наблюдаемому разочарованию, живя с ZeroMQ в течение некоторого времени, начиная с 2.11+, и сейчас некоторое время, я бы осмелился сказать несколько слов о ZeroMQ Design & Art of Zen-of-Zero.
Учитывая, что ваш MCVE-код даже не пытается собрать и проверить безошибочное состояние, во время выполнения анализ сложно построить, не имея доступных деталей.
Вместо того, чтобы гадать,
Лучший следующий шаг: установить сокет - Monitor
, чтобы увидеть все события LIVE
Ваш контекст использованияработает с tcp://
-транспортным классом, так что вы счастливы иметь возможность раскрутить сокет- Monitor
Галерея событий,что сокет - Monitor
может сканировать / сообщать в реальном времени сеанса по мере их появления, так что можно УСТАНОВИТЬ как любое ожидаемое поведение (иОрдr событий) и / или обнаружение любых неожиданных событий (ы) - по мере их появления:
ZMQ_EVENT_CONNECTED,
ZMQ_EVENT_CONNECT_DELAYED,
ZMQ_EVENT_CONNECT_RETRIED,
ZMQ_EVENT_LISTENING,
ZMQ_EVENT_BIND_FAILED,
ZMQ_EVENT_ACCEPTED,
ZMQ_EVENT_ACCEPT_FAILED,
ZMQ_EVENT_CLOSED,
ZMQ_EVENT_CLOSE_FAILED,
ZMQ_EVENT_DISCONNECTED,
ZMQ_EVENT_MONITOR_STOPPED,
ZMQ_EVENT_HANDSHAKE_FAILED,
ZMQ_EVENT_HANDSHAKE_SUCCEED
Как создать сокет ZeroMQ- Monitor
?
ZeroMQ использует двухстороннюю инфраструктуру, где часть 1) создается "внутри" механизма экземпляров Context()
путем вызоваthe:
int zmq_socket_monitor ( void *socket, char *endpoint, int events );
Это сделает первую половину работы - оснастит Context()
новым (внутренним, оснащенным уже выданным внутренним .bind()
в inproc://
-транспортный класс) AccessPoint , поэтому он готов к внешнему .connect()
-еду из второй половины сокета- Monitor
- внешний ZMQ_PAIR
основанный на архетипе прослушиватель событий (кто бы ни играл эту роль)
часть 2) инфраструктуры просто .connect()
к первой части, а остальное ваше. Документация API определяет все подробности о многокадровых сообщениях, отправляемых по этой ссылке из экземпляра monitored- Context()
в руки monitor-Listener.
Учитывая проблему, определенную выше, этот сокет- Monitor
обязательно отразит все события, полученные из ZeroMQ-ZMTP / RFC, и сделает их отчетами в естественной последовательности по мере их появления (если они появляются) и Monitor
-Listener может пометить каждое из них отметкой времени с точностью до наносекунды и отобразить их в отдельном (выделенная диагностика телеметрии) GUI / CLI.
zmq_socket_monitor()
метод позволяет потоку приложения отслеживать события сокета (например, соединения) на сокете ZeroMQ. Каждый вызов этого метода создает сокет ZMQ_PAIR
и связывает его с указанной конечной точкой inproc://
. Чтобы собрать события сокета, вы должны создать свой собственный ZMQ_PAIR
сокет и подключить его к конечной точке.
Аргумент events является битовой маской сокетасобытия, которые вы хотите отслеживать, см. ниже «Поддерживаемые события». Чтобы отслеживать все события, используйте значение события ZMQ_EVENT_ALL
.
ПРИМЕЧАНИЕ: при добавлении новых событий значение перехвата всехначну их возвращать. Приложение, которое использует строгую и фиксированную последовательность событий, не должно использовать ZMQ_EVENT_ALL
, чтобы гарантировать совместимость с будущими версиями.
Каждое событие отправляется какдва кадра. Первый кадр содержит номер события (16 бит) и значение события (32 бита), который предоставляет дополнительные данные в соответствии с номером события. Второй кадр содержит строку, которая указывает затронутую конечную точку TCP или IPC.
Для примера кода монитора-декодера, можете посмотреть здесь .