Esempio n. 1
0
async def main():
    with pynng.Rep0() as rep:
        n0 = await node0(rep)
        await curio.sleep(1)
        await node1()

        await n0.cancel()
Esempio n. 2
0
def test_synchronous_recv_context():
    with pynng.Rep0(listen=addr, recv_timeout=500) as rep, \
            pynng.Req0(dial=addr, recv_timeout=500) as req:
        req.send(b'oh hello there old pal')
        assert rep.recv() == b'oh hello there old pal'
        rep.send(b'it is so good to hear from you')
        assert req.recv() == b'it is so good to hear from you'
Esempio n. 3
0
    def _connect(self):
        self._buff = Queue()
        self._rep = pynng.Rep0()

        bind = False
        while not bind:
            try:
                addr = 'tcp://' + get_network_ip() + ':' + str(
                    random.randrange(MIN_PORT, MAX_PORT))
                self._rep.listen(addr)
                logger.debug('Assigned server address is %s', addr)
                bind = True
            except pynng.exceptions.AddressInUse:
                pass
        self._listener = threading.Thread(target=self._listen)
        self._listener.daemon = True
        self._listener.start()

        self._req = None

        logger.debug('Set server address %s as handle %s', addr, self._handle)
        self._client.set(self._handle,
                         bytes(addr, 'utf-8'),
                         ex=mp_config.get_parameter(
                             mp_config.REDIS_EXPIRY_TIME))
Esempio n. 4
0
def main():
    for N in [100, 3 * 1024 * 1024, 1920 * 1080 * 3]:
        ba = (random.getrandbits(8 * N)).to_bytes(N, sys.byteorder)
        with pynng.Rep0(listen=ipc_address) as rep, pynng.Req0(dial=ipc_address) as req:
            t0 = time.time_ns()
            req.send(ba)
            rep.send(rep.recv())
            print((time.time_ns() - t0) / 10 ** 6, "ms")
Esempio n. 5
0
 async def receive_loop(self):
     with pynng.Rep0(listen=self.address) as sock:
         self.rep_sock = sock
         while True:
             msg = await self.rep_sock.arecv_msg()
             msg_bytes = msg.bytes
             if msg_bytes == b'exit':
                 await self.rep_sock.asend(b'ACK')
                 print('exiting')
                 break
             await self._handle_bytes_received(msg_bytes)
Esempio n. 6
0
def server(addr, n, dm, rm):
    with pynng.Rep0(listen=addr) as rep:
        ba = (random.getrandbits(8 * n)).to_bytes(n, sys.byteorder)
        while True:
            if rep.recv() == b"connect":
                rep.send(b"data")
            if rep.recv() == b"ready":
                print(len(dm))
                t0 = time.time_ns()
                rm.write(ba)
                print("write result to mmap: ", (time.time_ns() - t0) / 10 ** 6, "ms")
                rep.send(b"result")
            if rep.recv() == b"get":
                rep.send(b"data")
Esempio n. 7
0
async def server_loop(nursery, worker_name, address):

    async def handle_req(sock, bytes):
        await trio.sleep(random.randint(1, 60)/10)
        print(f"        {worker_name} received: {bytes}")
        await sock.asend(b'ack:' + bytes)

    with pynng.Rep0(listen=address) as rep_sock:
        while True:
            msg = await rep_sock.arecv_msg()
            msg_bytes = msg.bytes
            nursery.start_soon(
                handle_req, rep_sock, msg_bytes
            )
Esempio n. 8
0
def test_context_recv_send_msg():
    with pynng.Req0(listen=addr, recv_timeout=to) as s1, \
            pynng.Rep0(dial=addr, recv_timeout=to) as s2:
        with s1.new_context() as ctx1, s2.new_context() as ctx2:
            wait_pipe_len(s1, 1)
            msg = pynng.Message(b'do i even know you')
            ctx1.send_msg(msg)
            msg2 = ctx2.recv_msg()
            assert msg2.pipe is s2.pipes[0]
            assert msg2.bytes == b'do i even know you'
            msg3 = pynng.Message(b'yes of course i am your favorite platypus')
            ctx2.send_msg(msg3)
            msg4 = ctx1.recv_msg()
            assert msg4.pipe is s1.pipes[0]
            assert msg4.bytes == b'yes of course i am your favorite platypus'
Esempio n. 9
0
def test_cannot_double_send():
    # double send would cause a SEGFAULT!!! That's no good
    with pynng.Req0(listen=addr, recv_timeout=to) as s1, \
            pynng.Rep0(dial=addr, recv_timeout=to) as s2:
        msg = pynng.Message(b'this is great')
        s1.send_msg(msg)
        with pytest.raises(pynng.MessageStateError):
            s1.send_msg(msg)

        with s1.new_context() as ctx:
            msg = pynng.Message(b'this also is great')
            ctx.send_msg(msg)
            with pytest.raises(pynng.MessageStateError):
                ctx.send_msg(msg)

        # don't really need to receive, but linters hate not using s2
        s2.recv_msg()
Esempio n. 10
0
def test_reqrep0():
    with pynng.Req0(listen=addr, recv_timeout=100) as req, \
            pynng.Rep0(dial=addr, recv_timeout=100) as rep:

        request = b'i am requesting'
        req.send(request)
        assert rep.recv() == request

        response = b'i am responding'
        rep.send(response)
        assert req.recv() == response

        with pytest.raises(pynng.BadState):
            req.recv()

        # responders can't send before receiving
        with pytest.raises(pynng.BadState):
            rep.send(b'I cannot do this why am I trying')
Esempio n. 11
0
async def test_multiple_contexts():
    async def recv_and_send(ctx):
        data = await ctx.arecv()
        await trio.sleep(0.05)
        await ctx.asend(data)

    with pynng.Rep0(listen=addr, recv_timeout=500) as rep, \
            pynng.Req0(dial=addr, recv_timeout=500) as req1, \
            pynng.Req0(dial=addr, recv_timeout=500) as req2:
        async with trio.open_nursery() as n:
            ctx1, ctx2 = [rep.new_context() for _ in range(2)]
            with ctx1, ctx2:
                n.start_soon(recv_and_send, ctx1)
                n.start_soon(recv_and_send, ctx2)

                await req1.asend(b'oh hi')
                await req2.asend(b'me toooo')
                assert (await req1.arecv() == b'oh hi')
                assert (await req2.arecv() == b'me toooo')
Esempio n. 12
0
async def test_context():
    with pynng.Req0(listen=addr, recv_timeout=1000) as req_sock, \
            pynng.Rep0(dial=addr, recv_timeout=1000) as rep_sock:
        with req_sock.new_context() as req, rep_sock.new_context() as rep:

            assert isinstance(req, pynng.Context)
            assert isinstance(rep, pynng.Context)
            request = b'i am requesting'
            await req.asend(request)
            assert await rep.arecv() == request

            response = b'i am responding'
            await rep.asend(response)
            assert await req.arecv() == response

            with pytest.raises(pynng.BadState):
                await req.arecv()

            # responders can't send before receiving
            with pytest.raises(pynng.BadState):
                await rep.asend(b'I cannot do this why am I trying')
Esempio n. 13
0
def test_multiple_contexts():
    async def recv_and_send(ctx):
        data = await ctx.arecv()
        await trio.sleep(0.05)
        await ctx.asend(data)

    async def do_some_stuff(rep, req1, req2):
        async with trio.open_nursery() as n:
            ctx1, ctx2 = rep.new_contexts(2)
            n.start_soon(recv_and_send, ctx1)
            n.start_soon(recv_and_send, ctx2)

            await req1.asend(b'oh hi')
            await req2.asend(b'me toooo')
            assert (await req1.arecv() == b'oh hi')
            assert (await req2.arecv() == b'me toooo')

    with pynng.Rep0(listen=addr, recv_timeout=500) as rep, \
            pynng.Req0(dial=addr, recv_timeout=500) as req1, \
            pynng.Req0(dial=addr, recv_timeout=500) as req2:
        trio.run(do_some_stuff, rep, req1, req2)
Esempio n. 14
0
def serve(address, np_convert):
    with pynng.Rep0(listen=address, recv_timeout=100, send_timeout=100) as rep:

        while True:
            try:
                # receive
                msg = rep.recv()
                # print(f"got message from client, {msg.decode()}")
                # print(f"total received byte size, {len(msg)}")
                if np_convert:
                    input = np.frombuffer(msg, dtype=np.uint8)
                    print(input.shape)
                # output
                output = np.zeros((1024), dtype=np.uint8).tobytes()

                # send
                rep.send(output)

            except pynng.Timeout:
                pass
            except KeyboardInterrupt:
                break
            except Exception:
                break
Esempio n. 15
0
 def __init__(self, port: int, handler) -> None:
     self._handler = handler
     self._node = pynng.Rep0()
     self._node.listen(f'tcp://0.0.0.0:{port}')