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

Michael Hansen michaelsvenna at gmail.com
Sun Aug 19 09:05:07 CEST 2018


Harald,
I think this is just a consequence of me using gmail.
I copied code directly from my editor (visualcode) into gmail.
The formatting was kept this way.

On Sun, Aug 19, 2018 at 8:20 AM, Harald Achitz <harald.achitz at gmail.com>
wrote:

> Sorry for OT, but since I see this the first time:
> How can I put such syntax colored source code into a mail like the OP did?
>
> Am So., 19. Aug. 2018 um 07:58 Uhr schrieb Michael Hansen <
> michaelsvenna at gmail.com>:
>
>> Ahh ok of course.
>> This works much better.
>> What if I have a setup where I in client A in reality have a lot of
>> threads where each thread needs a type of stream of data and in B i have
>> connected some sensors.
>> These sensors needs to be streamed from B to A such that a group of
>> threads needs sensor X another group of threads in A needs output of sensor
>> Y etc.
>> What would be the best type of architecture for this type of setup?
>>
>>
>> On Sat, Aug 18, 2018, 10:03 Mykola Ostrovskyy via zeromq-dev <
>> zeromq-dev at lists.zeromq.org> wrote:
>>
>>> 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
>>>>
>>> _______________________________________________
>>> 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/20180819/5cd2613a/attachment.html>


More information about the zeromq-dev mailing list