пара розеток pyzmq застряла - PullRequest
0 голосов
/ 14 апреля 2020

Я следую примеру двунаправленной пары сокетов из документации к pyzmq. Я создал два файла: socket1.py с этим кодом

import zmq
import random
import sys
import time

port = "5556"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.connect("tcp://localhost:{}".format(port))
print("Socket created")

i = 0
while True:
    msg = socket.recv()
    print("socket: msg recved")
    print(msg)
    socket.send_string("hello from 1")
    time.sleep(1)
    print(i)

и socket2.py с этим кодом:

import zmq
import random
import sys
import time

port = "5556"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.connect("tcp://localhost:{}".format(port))
print("Socket created")

i = 0
while True:
    socket.send_string("hello from 2")
    print("socket2: msg sent")
    msg = socket.recv()
    print(msg)
    time.sleep(1)
    print(i)

Я запускаю оба файла в 2 отдельных терминалах, но он печатает следующие сообщения в терминале 1 и терминале 2 соответственно:

Socket created
Socket created
socket2: msg sent

Я не могу понять, почему сокет1 не получает сообщения, отправленные сокетом2, и застрял на socket.recv(). Я был бы очень признателен за любую помощь. ТИА.

1 Ответ

1 голос
/ 14 апреля 2020

Вы рядом. В первом примере socket1.py необходимо привязать к порту. zeromq превратит это в прослушивание для подключения клиента.

import zmq
import random
import sys
import time

port = "5556"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.bind("tcp://localhost:{}".format(port))
print("Socket created")

i = 0
while True:
    msg = socket.recv()
    print("socket: msg recved")
    print(msg)
    socket.send_string("hello from 1")
    time.sleep(1)
    print(i)
...