NetMQ DealerSocket не может получить сообщение - PullRequest
0 голосов
/ 14 ноября 2018

Код моего сервера Python3:

import zmq
context = zmq.Context()
router = context.socket(zmq.ROUTER)
router.bind("tcp://*:1337")

router.send_multipart([b'build_0', b''])

while True:
    pass

Код моего клиента C #:

/// <summary>
/// Receive data from server.
/// </summary>
private void RecvFromServer()
{
    // Init the socket.
    recvFromServerSocket = new DealerSocket();
    recvFromServerSocket.Options.Identity = StringToByteArray("build_0");
    recvFromServerSocket.Connect(NETWORK_PREFIX + serverAddress + PORT_INFIX + recvFromServerPort);

    NetMQMessage frames = new NetMQMessage();

    // When the socket is ready, receive a multipart message.
    recvFromServerSocket.ReceiveReady += (o, s) =>
    {
        onBeginListenToServer?.Invoke(ref BenchmarkData.benchmark.began_to_listen_to_server);
        frames = s.Socket.ReceiveMultipartMessage();
        foreach (NetMQFrame frame in frames)
        {
            Debug.Log(frame.ConvertToString());
            messagesFromServer.Enqueue(frame.ConvertToString());
        }
        frames.Clear();

        onReceivedMessage?.Invoke(ref BenchmarkData.benchmark.received_from_server);
    };

    // Init the poller.
    recvFromServerPoller = new NetMQPoller { recvFromServerSocket };

    // Run the poller.
    recvFromServerPoller.Run();
}

В данный момент сообщение не будет получено клиентом C #.

Однако, если я установлю для сокета Python значение zmq.DEALER, клиент получит сообщение, но обработает build_0 как часть составного сообщения, а не идентификатор отправителя.Мне нужно, чтобы ID действительно был принят, так как будет несколько клиентов.Например, дилерские сокеты Python с идентификатором build_0 могут взаимодействовать с сервером.

Как настроить NetMQ DealerSocket для приема любых сообщений от сокета маршрутизатора pyzmq при правильном использовании идентификаторов?

...