美文网首页
ZeroMQ 的各种模式 C 语言版

ZeroMQ 的各种模式 C 语言版

作者: afakee | 来源:发表于2016-10-11 11:08 被阅读0次

    1. reply -- request

    简单的一问一答模式,
    客户端(ZMQ_REQ) 提交一个请求, 然后等待服务器(ZMQ_REP) 响应,
    然后此时服务器收到客户端请求, 然后做出回应


    Paste_Image.png
    代码

    服务端 server.c

    #include <assert.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <zmq.h>
    
    int main(){
        void *context = zmq_ctx_new();
        void *responder = zmq_socket(context, ZMQ_REP);
        int rc = zmq_bind(responder, "tcp://*:5555");
        assert(rc == 0);
    
        while(1){
        char buf[10];
        memset(buf, 0, 10);
        zmq_recv(responder, buf, 10, 0);
        printf("responder recv: %s\n", buf);
        sleep(1);
    
        zmq_send(responder, "s:reply", 7, 0);
    
        }
        return 0;
    }
    

    客户端 client.c

    #include <assert.h>
    #include <errno.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <zmq.h>
    
    int main(int argc, char const *argv[]) {
        void *context = zmq_ctx_new();
        void *requester = zmq_socket(context, ZMQ_REQ);
        /* 这里连接的地址需要更换成自己要连接服务器的地址 */
        int rc = zmq_connect(requester, "tcp://192.168.64.37:5555");
        assert(rc == 0);
    
        char msg[10] = "hello ser";
        for(int i = 0; i < 10; i++){
            printf("sending msg\n");
            rc = zmq_send(requester, msg, strlen(msg), 0);
            assert(rc > 0);
            /* 接受回应 */
            char buf[10];
            memset(buf, 0, 10);
            zmq_recv(requester, buf, 10, 0);
            printf("recv: %s\n", buf);
        }
        return 0;
    }
    

    注意这里的模式.
    **ZMQ_REP ( zmq_reply): **
    用于服务端接收客户端请求, 发送自己响应内容的.
    ZMQ_REQ(zmq_request):
    用于客户端发送请求, 接收服务器响应
    .
    二者都是双向, 也就是能收能发(消息), 但是模式是 send...recv....send....recv...... 这样连续的.

    不能客户端一直 send 请求, 服务器一直 recv 请求, 这样是会出错的.
    因为游戏就是这么设定的.

    你可以先开启服务端, 再开启客户端, 相反的顺序也是一样可以工作的.
    但是如果你用 Ctrl + C 终止服务器, 在重新开启的话, 客户端就无法工作了, 这里需要以后更深入的研究.
    你也可以试着开启多个客户端试一试

    ZMQ_REQ ZMQ_REP

    2. subscriber -- publisher

    更新中...

    相关文章

      网友评论

          本文标题:ZeroMQ 的各种模式 C 语言版

          本文链接:https://www.haomeiwen.com/subject/ulzvyttx.html