lvxuzhou


私信TA

用户名:lvxuzhou

访问量:106720

签 名:

lvxuzhou

等  级
排  名 47
经  验 12168
参赛次数 0
文章发表 56
年  龄 0
在职情况 学生
学  校 西安
专  业

  自我简介:

      一、简介

    ZMQ(?MQ、ZeroMQ, 0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。ZMQ的快速足以胜任集群应用产品。它的异步I/O机制让你能够构建多核应用程序,完成异步消息处理任务。ZMQ有着多语言支持,并能在几乎所有的操作系统上运行。

 

   二、 安装方法参考

   https://zeromq.org/languages/c/

   三、请求-应答模式

    hwserver.c代码

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main (void)
{
        void *context = zmq_init (1);
        // 与客户端通信的套接字
        void *responder = zmq_socket (context, ZMQ_REP);
        zmq_bind (responder, "tcp://*:55551");
        while (1) {
                // 等待客户端请求
                zmq_msg_t request;
                zmq_msg_init (&request);
                zmq_msg_recv   ( &request,responder,0);
                printf ("收到 Hello\n");
                zmq_msg_close (&request);
                // 做些“处理”
                sleep (1);
                // 返回应答
                zmq_msg_t reply;
                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_term (context);
        return 0;
}

   编译:cc hwserver.c  -lzmq -o ser

   运行:

ser.png

hwclient.c

#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
int main (void)
{
        void *context = zmq_init (1);
        // 连接至服务端的套接字
        printf ("正在连接至 hello world 服务端...\n");
        void *requester = zmq_socket (context, ZMQ_REQ);
        zmq_connect (requester, "tcp://localhost:55551");
        int request_nbr;
        for (request_nbr = 0; request_nbr != 10; request_nbr++) {
                zmq_msg_t request;
                zmq_msg_init_size (&request, 5);
                memcpy (zmq_msg_data (&request), "Hello", 5);
                printf ("正在发送 Hello %d...\n", request_nbr);
                zmq_msg_send (&request,requester, 0);
                zmq_msg_close (&request);
                zmq_msg_t reply;
                zmq_msg_init (&reply);
                zmq_msg_recv (&reply,requester, 0);
                printf ("接收到 World %d\n", request_nbr);
                zmq_msg_close (&reply);
        }
        zmq_close (requester);
        zmq_term (context);
        return 0;
}

编译:cc hwclient.c -lzmq -o cli

运行:

cli.png


 

0.0分

1 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »