参考: http://zguide.zeromq.org/page:all
REP/REQ这种模式是双向的,应答模式。也就是说是一个请求一个响应,不能发送多个消息。
模型的图如下:(图源自于 http://zguide.zeromq.org/page:all )
代码如下:
服务器代码:
package reqrep; import org.zeromq.ZMQ; public class REP { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub ZMQ.Context context = ZMQ.context(1); ZMQ.Socket s = context.socket(ZMQ.REP); s.bind("tcp://*:5557"); int i = 0; while (true) { i++; String msg = new String(s.recv(0)); s.send((msg + "_rep"+i).getBytes(), 0); } } }
客户端代码:
package reqrep; import org.zeromq.ZMQ; public class REQ { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub ZMQ.Context context = ZMQ.context(1); ZMQ.Socket s = context.socket(ZMQ.REQ); s.connect("tcp://*:5557"); int i = 0; while (true) { Thread.currentThread().sleep(2000); s.send(("msg" + "_req").getBytes(), 0); String rev = new String(s.recv(0)); System.out.println(rev); } } }
结果:
msg_req_rep1 msg_req_rep2 msg_req_rep3 msg_req_rep4 msg_req_rep5 msg_req_rep6 msg_req_rep7 msg_req_rep8 ...
显然这种应答模式的效率很低!