版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/80845034
1.zeromq简介
zeromq看起来像一个嵌入式网络库,工作起来却像一个并发性(concurrency)框架。
Its asynchronous I/O model gives you scalable multicore applications,built as asynchronous message-processing tasks.
它的异步I/O模型可以让一个可伸缩的多核应用程序,构建为异步消息处理任务。
zeromq代码示例: https://github.com/imatix/zguide/tree/master/examples/
2.如何使用Zeromq
ZMQ_REP类型的套接字被服务端用来接收户端的请求并进行回复。
#include "stdafx.h"
#include <zmq.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#ifndef _WIN32
#include <unistd.h>
#else
#include <windows.h>
#endif
int main (void)
{
//
void *context = NULL;
//创建上下文,ZMQ 环境上下文是是线程安全的
//可以尽可能多的被应用线程共享使用,而且不需要在调用端添加线程锁
if ((context=zmq_ctx_new ())==NULL)
{
return 0;
}
void *responder = zmq_socket (context, ZMQ_REP);
int rc = zmq_bind (responder, "tcp://*:5555");
assert (rc == 0);
while (1) {
zmq_msg_t request;
//msg参数引用的ZMQ消息对象进行初始化,使其成为一个空消息
rc=zmq_msg_init(&request);
assert (rc == 0);
//从一个socket中接受一个消息帧
zmq_msg_recv(&request,responder,0);
printf ("Received Hello\n");
zmq_msg_close(&request);
// Do some 'work'
Sleep (1);
zmq_msg_t reply;
//使用一个指定的空间大小初始化ZMQ消息对象
zmq_msg_init_size(&reply,5);
memcpy(zmq_msg_data(&reply),"world",5);
zmq_msg_send(&reply,responder,0);
zmq_msg_close(&reply);
}
zmq_close(responder);
zmq_ctx_destroy(context);
return 0;
}