为啥 ZeroMQ 服务器没有收到来自客户端的任何请求?
Posted
技术标签:
【中文标题】为啥 ZeroMQ 服务器没有收到来自客户端的任何请求?【英文标题】: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
套接字以相同的方式连接并且工作正常。
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于为啥 ZeroMQ 服务器没有收到来自客户端的任何请求?的主要内容,如果未能解决你的问题,请参考以下文章
具有 REQ 和 REP 套接字的 C++ ZeroMQ 单一应用程序