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@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@gmail.com> wrote:
Aren't you missing indentation in rtx functions?

On Sat, Aug 18, 2018, 01:20 Michael Hansen <michaelsvenna@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@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev


_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev