【发布时间】:2017-10-30 07:49:45
【问题描述】:
我正在尝试用 Java 实现 ZMQ REQ/REP 模型
我有一个服务器-角色,在 5564 后运行,它充当回复者
ZMQ.Socket repSock = context.socket(ZMQ.REP);
我有一个客户-角色,在 5563 后运行
ZMQ.Socket syncclient = context.socket(ZMQ.REQ);
我在中间有一个代理-服务器,它传递请求和响应
ZMQ.proxy(reqSocket, repSocket, null);
拥有代理的好处是我可以添加多个服务器
repSocket.connect("tcp://" + addr.getHostAddress() + ":" + port);
哪个工作正常。
现在,当我从代理中删除服务器节点时
repSocket.disconnect("tcp://" + addr.getHostAddress() + ":" + port);
客户端卡住了,因为已经发出请求并且 REQ-socket 等待响应。
所以进程停留在syncclient.recvStr()
for (int request_nbr = 0; request_nbr < (request_nbr + 1); request_nbr++) {
syncclient.send(str.getBytes(),0);
System.out.println("Send Dataaaa....... " );
String data = syncclient.recvStr(Charset.defaultCharset());
System.out.println(" here.. " +data);
request_nbr++;
}
我搜索并找不到跟踪REQ-socket 的方法
我需要以下两件事中的任何一件:
一种跟踪
Socket-instance 的方法,我将要断开连接,等待所有消息都处理完毕,这样syncclient.recvStr()就不会被阻止一种重置
syncclient-socket 的方法,这样我就可以不断收到REQ/REP响应而不会中断
【问题讨论】: