[zeromq-dev] problem with sending and recieving in a simple PAIR setup

Mykola Ostrovskyy spambox03 at mail.ru
Sat Aug 18 09:59:50 CEST 2018


Michael,

ZMQ sockets are not thread safe. Each thread should use a separate socket,
so you need a pair of sockets in each test script.

Also PAIR is a rather special-purpose type of socket mostly used in scope
of one process.

I would recommend to use two PUSH-PULL channels for asynchronous
communication between peers. Something like:

ClientA
  RecvThread
    recvsocket.bind(PULL, 9998)
  SendThread
    sendsocket.connect(PUSH, 9999)

ClientB
  RecvThread
    recvsocket.bind(PULL, 9999)
  SendThread
    sendsocket.connect(PUSH, 9998)


Regards,
Mykola


сб, 18 авг. 2018 г. в 7:18, Michael Hansen <michaelsvenna at gmail.com>:

> Hi,
> I am not sure I see where there is missing some indentation.
> To me it looks okay regarding indentation.
> rtx is just a def with a while loop where recv is called and printed in
> every iteration.
>
> On Sat, Aug 18, 2018 at 12:44 AM, Tomer Eliyahu <tomereliyahu1 at gmail.com>
> wrote:
>
>> Aren't you missing indentation in rtx functions?
>>
>> On Sat, Aug 18, 2018, 01:20 Michael Hansen <michaelsvenna at gmail.com>
>> wrote:
>>
>>> Hello, I am quite new to ZMQ which seems like a really nice library.
>>> However i seem to be running into some issues already.
>>> I have to make a setup with just 2 peers who can send to each other.
>>> There is no order in how the clients communicate - however in generel
>>> data flows
>>> from one to the other and commands from the other to the first.
>>>
>>> I made a small test as below but communication seem to hang up and only
>>> one part is sending.
>>> Also - sometimes when i try to run this, i get the following error:
>>>
>>> 'Resource temporarily unavailable (bundled/zeromq/src/signaler.cpp:301)
>>>
>>> Abort trap: 6'
>>>
>>>
>>> Here are the 2 components, what am I doing wrong?
>>>
>>>
>>>
>>>
>>> # ==============
>>> # = SERVER A
>>> # ==============
>>>
>>>
>>> import threading
>>> import time
>>> import zmq
>>>
>>>
>>> port = 9999
>>> context = zmq.Context()
>>> socket = context.socket(zmq.PAIR)
>>> socket.connect("tcp://127.0.0.1:%s" % port)
>>>
>>>
>>> def rtx(socket):
>>> print('A started receiving...')
>>> while 1:
>>> print(b'A RECEIVED : %s' % socket.recv())
>>>
>>>
>>> def ttx(socket):
>>> print('A started transmitting...')
>>> while 1:
>>> socket.send(b'Message from A')
>>> time.sleep(1)
>>>
>>>
>>> threading.Thread(target=rtx, args=(socket,)).start()
>>> threading.Thread(target=ttx, args=(socket,)).start()
>>>
>>>
>>>
>>>
>>> # ==============
>>> # = SERVER B
>>> # ==============
>>>
>>>
>>> import threading
>>> import time
>>> import zmq
>>>
>>>
>>> port = 9999
>>> context = zmq.Context()
>>> socket = context.socket(zmq.PAIR)
>>> socket.bind("tcp://127.0.0.1:%s" % port)
>>>
>>>
>>> def rtx(socket):
>>> print('B started receiving...')
>>> while 1:
>>> print(b'B RECEIVED : %s' % socket.recv())
>>>
>>>
>>> def ttx(socket):
>>> print('B started transmitting...')
>>> while 1:
>>> socket.send(b'Message from B')
>>> time.sleep(1)
>>>
>>>
>>> threading.Thread(target=rtx, args=(socket,)).start()
>>> threading.Thread(target=ttx, args=(socket,)).start()
>>>
>>> _______________________________________________
>>> zeromq-dev mailing list
>>> zeromq-dev at lists.zeromq.org
>>> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20180818/aaa074d0/attachment.html>


More information about the zeromq-dev mailing list