zmq req-rep 模式代码


#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值