zeromq请求应答(REQ/REP)

// 非线程安全

 

 

zmq_socket

void*  zmq_socket(void* context, int type);

 

   API 会根据context , type 创建一个不透明的套接字句柄.  并且是没有初始化连接的

 也没有和任何端口联系在一起,如果是客户端,这时就需要用zmq_connect 去连接到服务器

  如果是服务器,需要去用zmq_bind API去绑定端口.

   与传统套接字不同的是 ,传统套接字不是流协议,就是报文协议

   zmq 的套接字提出了 异步消息队列,并且伴随着准确的队列语义前面的实现依赖于

扫描二维码关注公众号,回复: 135691 查看本文章

type,也就是不同的使用套接字类型

ZMQ传输的是无保障的消息

 

  context : 可以从 zmq_ctx_new() apI 获取

  type: 表示的是你需要创建的是何种套接字类型

 

 

type:

   请求-应答模型(ZMQ-REQ)

      该模型是被用作 从一个 客户端发送请求到一个或者是多个服务器,然后服务器对每个请求做出请求.

      如果没有服务器存在,客户端会组则直到有一个服务器变成可用状态为止,其服务器操作是 zmq_recv, zmq_send.即交替使用,很适合用于http服务器.

 

   对于客户端来说,需要先send, 再 recv

 

exqmple:

     #include <stdio.h>

#include <stdlib.h>

extern "C"

{

#include <zmq.h>

}

#pragma comment(lib,"libzmq_d.lib")

#define buffersize 4096

int main(int argccharargv[])

{

 

void * ctx = zmq_ctx_new();

void* server = zmq_socket(ctx, ZMQ_REQ);

 

zmq_connect(server, "tcp://localhost:5050");

char* buffer[256] = { 0 };

int ret = 0;

char* str = "我是客户端.....";

while (true)

{

memset(buffer, 0, 256);

zmq_send(server, str, strlen(str), 0);

zmq_recv(server, buffer, 256, 0);

printf("%s\n", buffer);

}

system("pause");

zmq_close(server);

zmq_ctx_destroy(ctx);

return 0;

}

 

ZMQ_REP模式

     该模型用于 服务器 去接受请求, 并对接受的请求做出相应的套接字模式 , 即先 recv, 再 send

 

example :

 #include <stdio.h>

#include <stdlib.h>

extern "C"

{

#include <zmq.h>

}

#pragma comment(lib,"libzmq_d.lib")

#define buffersize 4096

int main(int argccharargv[])

{

 

void * ctx = zmq_ctx_new();

void* server = zmq_socket(ctx, ZMQ_REQ);

 

zmq_connect(server, "tcp://localhost:5050");

char* buffer[256] = { 0 };

int ret = 0;

char* str = "我是客户端.....";

while (true)

{

memset(buffer, 0, 256);

zmq_send(server, str, strlen(str), 0);

zmq_recv(server, buffer, 256, 0);

printf("%s\n", buffer);

}

system("pause");

zmq_close(server);

zmq_ctx_destroy(ctx);

return 0;

}

猜你喜欢

转载自blog.csdn.net/liulihuo_gyh/article/details/80221677
今日推荐