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
运行:
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
运行:
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:674 |
震宇大神的杀毒软件 (C语言代码)浏览:1381 |
Pascal三角 (C语言代码)浏览:1252 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:787 |
兰顿蚂蚁 (C++代码)浏览:1163 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:368 |
校门外的树 (C语言代码)浏览:733 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:367 |
幸运数 (C++代码)浏览:1309 |
1128题解(返回值为数组的情况)浏览:571 |