我是靠谱客的博主 文艺犀牛,最近开发中收集的这篇文章主要介绍ZMQ (一、请求回应模型),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ZMQ(REQ-REP)

请求回应模型,客户端和服务端必须是一问一答的模式,如果客户端发送信息,服务端没有回信的话,客户端便不会继续发送信息,处于消息等待状态。可以有多个客户端,但是必须是一请求一应答。

                                                                    

C++示例代码:

服务端代码:

//server端

#include<iostream>
#include<zmq.h>
#include<Windows.h>
using namespace std;

int main()
{
	void *context = zmq_ctx_new();
	void *socket = zmq_socket(context, ZMQ_REP);
	zmq_bind(socket, "tcp://*:6000");

	int i = 1;//消息计数
	while (1)
	{
		char recvBuf[10] = { 0 };
		char *sendBuf = "world";

		int bytes = zmq_recv(socket, recvBuf, sizeof(recvBuf), 0);
		recvBuf[bytes] = '';
		printf("[Server] ---《%d》--- recvMessage:%s   size = %d bytesn", i++, recvBuf, bytes);

		Sleep(1000);

		bytes = zmq_send(socket, sendBuf, strlen(sendBuf) + 1, 0);
		printf("[Server] ---《%d》--- sendMessage: %s   size = %d bytesn", i, sendBuf, bytes);

	}

	zmq_close(socket);
	zmq_ctx_destroy(context);

	system("pause");
	return 0;
}

客户端代码:

//client

#include<iostream>
#include<zmq.h>
#include<Windows.h>
using namespace std;

int main()
{
	void *context = zmq_ctx_new();
	void *socket = zmq_socket(context, ZMQ_REQ);
	zmq_connect(socket, "tcp://localhost:6000");

	int i = 1;//消息计数
	for(int num = 0;num<10;num++)
	{
		char recvBuf[10] = { 0 };
		char *sendBuf = "hello";

		int bytes = zmq_send(socket, sendBuf, strlen(sendBuf) + 1, 0);
		printf("[Client] ---《%d》--- sendMessage: %s   size = %d bytesn", i, sendBuf,bytes);

		bytes = zmq_recv(socket, recvBuf, sizeof(recvBuf), 0);
		recvBuf[bytes] = '';
		printf("[Client] ---《%d》--- recvMessage:%s   size = %d bytesn", i++, recvBuf, bytes);
	}

	zmq_close(socket);
	zmq_ctx_destroy(context);

	system("pause");
	return 0;
}

先启动server端,再启动client端,运行结果如下:

最后

以上就是文艺犀牛为你收集整理的ZMQ (一、请求回应模型)的全部内容,希望文章能够帮你解决ZMQ (一、请求回应模型)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部