ZeroMQ 的各种模式 C 语言版

1. reply -- request

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


ZeroMQ 的各种模式 C 语言版_第1张图片
Paste_Image.png
代码

服务端 server.c

#include 
#include 
#include 
#include 
#include 

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 
#include 
#include 
#include 
#include 
#include 

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 终止服务器, 在重新开启的话, 客户端就无法工作了, 这里需要以后更深入的研究.
你也可以试着开启多个客户端试一试

ZeroMQ 的各种模式 C 语言版_第2张图片
ZMQ_REQ
ZeroMQ 的各种模式 C 语言版_第3张图片
ZMQ_REP

2. subscriber -- publisher

更新中...

你可能感兴趣的:(ZeroMQ 的各种模式 C 语言版)