Код моего сервера 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 при правильном использовании идентификаторов?