Добро пожаловать в Zen of Zero!
В случае, если кто-то никогда не работал с ZeroMQ,
здесь можно сначала посмотреть " ZeroMQ Принципы меньше чем Пять секунд ", прежде чем углубляться в дальнейшие детали
Q : Ничего не отображается, пока я не подключу client.
Конечно, это не так, ваш код настоятельно предлагается заблокировать до тех пор, пока канал доставки PAIR/PAIR
не сможет доставить сообщение. Как определяет API v4.2 +, метод .send()
будет блокироваться в течение всего периода " состояния отключения звука ".
Когда гнездо ZMQ_PAIR
переходит в состояние отключения звука из-за того, что достигнут максимальный уровень воды для подключенного узла, или если узел не подключен, тогда любой zmq_send
( 3) операции с сокетом должны блокироваться, пока одноранговый узел не станет доступным для отправки; сообщения не отбрасываются.
Может попробовать неблокирующий режим отправки (всегда признак хорошей инженерной практики, позволяющей избежать блокировки, тем более в распределенных вычислениях ) и лучше включить также <aSocket>.close()
и <aContext>.term()
в качестве практического правила (лучше всего при явном .setsockopt( zmq.LINGER, 0 )
) для избежания зависаний и в качестве хорошей инженерной практики для явного закрытия ресурсов и их освобождения обратно к системе
socket.send( b"Server message #[_{0:_>10d}_] to client3".format( i ), zmq.NOBLOCK )
Последнее, но не менее важное:
Q : Как правильно подключить zmq PAIR
между Ruby и Python?
, как объясняется в документации API:
ZMQ_PAIR
сокеты предназначены для межпотоковой связи через транспорт zmq_inproc
(7) и выполняют , а не реализуют такие функции, как автоматическое переподключение.
лучше не бывает способ сделать это, так как Python / Ruby не случай межпотоковой связи. ZeroMQ начиная с v2.1 + явно предупреждал, что архетип PAIR/PAIR
является экспериментальным и должен использоваться только с учетом этого.
Можно всегда заменяйте каждый такой сценарий использования тандемом PUSH/PULL
-симплексных каналов, обеспечивая одинаковый комфорт с парой .send()
-только + .recv()
-только каналов.