【问题标题】:Why a ZeroMQ Server does not receive any requests from Client?为什么 ZeroMQ 服务器没有收到来自客户端的任何请求?
【发布时间】:2020-05-07 20:37:56
【问题描述】:

我在MQL4(类似 c++ 的语言)中设置了 ZeroMQ 服务器,并在 Python 中设置了 ZeroMQ 客户端。由PUSH/PULL-sockets 构成的连接运行良好,但是当我尝试使用 REQ-socket 从 Python 向 ZeroMQ REP-socket 发送请求时,它什么也没收到。这是 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 套接字以相同的方式连接并且工作正常。

【问题讨论】:

    标签: python websocket zeromq mql4 pyzmq


    【解决方案1】:

    为什么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 )这不是发送请求吗? 顺便说一句 socket = reqSocket(在函数内作为变量传递,所以这不是问题)– blennd 1 小时前

    真是一场讲座!

    @blennd 如果你对一些信息争论不休,认为你没有在 MCVE 中发帖,你可能会鄙视那些赞助他们的时间和知识试图帮助你的人。对于这个社区来说是一种相当反模式,与网站文化完全相反。


    下一个候选者——如果一个socket-object实际上是一个偷偷改过的reqSocket-instance:

    也许,调用 .connect() 方法时应该更加小心,
    使用 "tcp://locaLhost:%d" % REQ_PORT,不是吗?

    完全准备好听到,您的 DNS 表已经设置并处于活动状态,可以顺利地将 locahost 符号主机名转换为 @ 987654331@ 和许多其他象征性的名字,
    就在太平洋的这一边,似乎很明显,至少到目前为止是这样

    :o)

    【讨论】:

    • socket.send_string(jsonMsg)。这不是发送请求吗? BTW socket = reqSocket(作为函数内部的变量传递,所以这不是问题)
    【解决方案2】:

    我的代码:

        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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-23
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2018-08-20
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多