lvxuzhou


私信TA

用户名:lvxuzhou

访问量:96983

签 名:

lvxuzhou

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

  自我简介:

TA的其他文章

cmake进阶之路一
浏览:146
cmake进阶之路二
浏览:109
ZeroMQ 基础一
浏览:105

      一、简介

    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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区