Почему сервер ZeroMQ не получает запросов от клиента? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть сервер ZeroMQ, настроенный на MQL4 (язык, подобный C ++), и клиент ZeroMQ на Python. Соединение из PUSH/PULL -сокетов работает хорошо, но когда я пытаюсь отправить запросы от Python с помощью REQ -сокета на ZeroMQ REP -сокет , он ничего не получает. Вот код Python:

    reqSocket.connect( "tcp://locahost:%d" % REQ_PORT )

    jsonMsg = json.dumps( requestMessage )

    socket.send_string( jsonMsg )
    print( "Sent a message" )

    response = socket.recv()
    print( "received a message" )

Вот код MQL4:

    repSocket.bind( StringFormat( "%s://%s:%d",
                                   ZEROMQ_PROTOCOL,
                                   HOSTNAME,
                                   REP_PORT
                                   )
                    );
    repSocket.recv( request, true );

    if( request.size() > 0 ) {

        string reply = MessageHandler( request );
        Print( reply );
        repSocket.send( reply );
        }

Я не сомневаюсь, что розетки подключены правильно, потому что у меня PUSH/PULL розетки подключены таким же образом, и все работает нормально.

Ответы [ 2 ]

0 голосов
/ 13 мая 2020

мой код:

    Context *context;
    Socket *rec;

    string ZEROMQ_PROTOCOL = "tcp";
    string HOSTNAME = "127.0.0.1";
    #define REP_PORT 55555
...
   context=new Context();   // <-- mayby u a forget
   rec= new Socket(context,ZMQ_REQ);
   rec.setReceiveTimeout(500);
   cConnect = StringFormat( "tcp://%s:%s",HOSTNAME,REP_PORT);
   rec.connect(cConnect);
0 голосов
/ 08 мая 2020

Q : " Почему сервер ZeroMQ не получает никаких запросов от клиента?"

Потому что исходный код не не отправляет любые :

reqSocket.connect( "tcp://locahost:%d" % REQ_PORT )
#^^^^^^^^._____________________________________________________SOCKET.connect()-s
jsonMsg = json.dumps( requestMessage )
pass;      socket.send_string( jsonMsg ); print( "Sent" )
response = socket.recv();
#          ^^^^^^.____________________________________other_one_.{send|recv}()-es

socket.send_string( jsonMsg ) . Разве это не отправляет запрос? BTW socket = reqSocket (передается как переменная внутри функции, поэтому проблема не в этом) - blennd 1 час go

Какая лекция!


Следующий кандидат - если socket -объект на самом деле является тайно переодетым reqSocket -экземпляр:

возможно, метод .connect() должен быть вызван с немного большей осторожностью,
с использованием "tcp://locaLhost:%d" % REQ_PORT, не так ли?

...