#include "zmq.h"
void zmqRep()
{
void *context = zmq_init(1); // 创建上下文, 初始化一个io_thread
void *responder = zmq_socket(context, ZMQ_REP); // 创建REP类型的socket
zmq_bind(responder, "tcp://*:1234"); // 绑定到端口并且在io_thread中accept连接
while (1) {
// Wait for next request from client
zmq_msg_t request; // 创建消息结构
zmq_msg_init(&request); // 初始化空的消息
zmq_recv(responder, &request, sizeof(zmq_msg_t), 0); // 从管道中接收消息
printf("Received Hello\n");
zmq_msg_close(&request); // 销毁消息
// Do some 'work'
Sleep(1);
// Send reply back to client
zmq_msg_t reply; // 创建reply消息的结构
zmq_msg_init_size(&reply, 5); // 初始化5个字节的消息来容纳“World”
memcpy(zmq_msg_data(&reply), "World", 5); // 拷贝到消息中
zmq_send(responder, &reply, sizeof(zmq_msg_t), 0); // 发送消息到管道,等待io_thread从管道中读取后发送
zmq_msg_close(&reply);
}
// We never get here but if we did, this would be how we end
zmq_close(responder);
zmq_term(context);
return ;
}
void zmqReq()
{
void *context = zmq_init(1); // 创建上下文, 初始化一个io_thread
// Socket to talk to server
printf("Connecting to hello world server…\n");
void *requester = zmq_socket(context, ZMQ_REQ);
zmq_connect(requester, "tcp://localhost:1234"); // 在io_thread中连接到端点
int request_nbr;
for (request_nbr = 0; request_nbr != 10; request_nbr++) { // 发送10次
zmq_msg_t request; // 建立request的消息结构
zmq_msg_init_size(&request, 5); // 初始化request消息为5个字节
memcpy(zmq_msg_data(&request), "Hello", 5); // 设置request消息内容为"Hello"
printf("Sending Hello %d…\n", request_nbr);
zmq_send(requester, &request, sizeof(zmq_msg_t), 0); // 发送消息到管道,等待io_thread从管道中读取后发送
zmq_msg_close(&request); // 销毁request消息
zmq_msg_t reply; // 建立reply的消息结构
zmq_msg_init(&reply); // 初始化reply消息为0字节的空消息
zmq_recv(requester, &reply, sizeof(zmq_msg_t), 0); // 从管道中接收消息
printf("Received World %d\n", request_nbr);
zmq_msg_close(&reply); // 销毁reply消息
}
zmq_close(requester);
zmq_term(context);
return;
}