我明白你的意思,文档令人困惑。这是一个使用带有轮询器的客户端DEALER
套接字(来自asyncsrv)在 Java 中的简单测试。服务器向客户端发送 3 条消息。客户端轮询并输出它收到的每条消息。我已send()
在客户端中添加以测试您的理论。假设send()
清除轮询器,我们希望客户端只输出一条消息的接收:
服务器
public static void main(String[] args) {
Context context = ZMQ.context(1);
ZMQ.Socket server = context.socket(ZMQ.ROUTER);
server.bind("tcp://*:5555");
server.sendMore("clientId");
server.send("msg1");
server.sendMore("clientId");
server.send("msg2");
server.sendMore("clientId");
server.send("msg3");
}
客户
public void run() {
socket = context.socket(ZMQ.DEALER);
socket.setIdentity("clientId".getBytes());
socket.connect("tcp://localhost:5555");
ZMQ.Poller poller = new ZMQ.Poller(1);
poller.register(socket, ZMQ.Poller.POLLIN);
while (true) {
poller.poll();
if (poller.pollin(0)) {
String msg = socket.recvStr(0);
System.out.println("Client got msg: " + msg);
socket.send("whatever", 0);
}
}
}
输出...
Client got msg: msg1
Client got msg: msg2
Client got msg: msg3
根据结果,doingsend()
不会清除轮询器socket
,原因应该很明显。我们将轮询器配置为POLLIN
,这意味着轮询器侦听到 的入站消息socket
。这样做时socket.send()
,它会创建出站消息,轮询器未在侦听这些消息。
希望能帮助到你...