| | |
| | | |
| | | # 1. 实例 |
| | | 以下实例代码在`demo`文件夹下 |
| | | ## 1.1 Bus模式 |
| | | **Source** |
| | | |
| | | `dgram_mod_bus.c` |
| | | |
| | | **编译** |
| | | |
| | | 安装好so包后,用如下的方式编译,shm_queue是通信队列包,usgcommon是公共包,pthread是系统的线程包 |
| | | `g++ dgram_mod_bus.c -mcx16 -std=c++11 -lshm_queue -lusgcommon -lpthread` |
| | | |
| | | **演示** |
| | | |
| | | 启动bus `./dgram_mod_bus server 8`。然后打开两个客户端连接bus, 第一个客户端订阅 "news", 第二个客户端发布 "news". 第一个客户端会收到第二个客户端推送的信息。 |
| | | |
| | | 启动bus |
| | | ``` |
| | | $ ./dgram_mod_bus server 8 |
| | | ``` |
| | | |
| | | 第一个客户端订阅 "news" |
| | | ``` |
| | | |
| | | $ ./dgram_mod_bus client 8 |
| | | Can I help you? sub, pub or quit |
| | | sub |
| | | Please input topic! |
| | | news |
| | | Sub success! |
| | | Can I help you? sub, pub or quit |
| | | 收到订阅消息:111111111111111111111 |
| | | |
| | | ``` |
| | | 第二个客户端发布 "news" |
| | | ``` |
| | | $ ./dgram_mod_bus client 8 |
| | | Can I help you? sub, pub or quit |
| | | pub |
| | | Please input topic and content |
| | | news 111111111111111111111 |
| | | Pub success! |
| | | Can I help you? sub, pub or quit |
| | | |
| | | ``` |
| | | 这里可以打开许多个客户端发布和订阅消息。 |
| | | # 编译 |
| | | |
| | | ``` |
| | | ./build.sh release |
| | | ``` |
| | | |
| | | ## 1.2 req_rep模式, 适应于注册 |
| | | # 生成API文档 |
| | | |
| | | **Source** `dgram_mod_req_rep.c` |
| | | |
| | | **编译** 同上 |
| | | |
| | | **演示** |
| | | |
| | | ``` |
| | | ## 启动注册中心 |
| | | ./dgram_mod_req_rep server 2 & node0=$! && sleep 1 |
| | | ## 向注册中心发送消息 |
| | | ./dgram_mod_req_rep client 2 node1 |
| | | kill $node0 |
| | | ``` |
| | | |
| | | ## survey模式, 适应于心跳 |
| | | **Source** `dgram_mod_survey.c` |
| | | |
| | | **编译** 同上 |
| | | |
| | | **演示** |
| | | 启动心跳中心 |
| | | ``` |
| | | $ ./dgram_mod_survey server 3 |
| | | |
| | | RECEIVED HREARTBEAT FROM 1000: 0 |
| | | RECEIVED HREARTBEAT FROM 1000: 1 |
| | | RECEIVED HREARTBEAT FROM 1000: 2 |
| | | RECEIVED HREARTBEAT FROM 1000: 3 |
| | | RECEIVED HREARTBEAT FROM 1000: 4 |
| | | RECEIVED HREARTBEAT FROM 1000: 5 |
| | | RECEIVED HREARTBEAT FROM 1000: 6 |
| | | RECEIVED HREARTBEAT FROM 1000: 7 |
| | | RECEIVED HREARTBEAT FROM 1000: 8 |
| | | RECEIVED HREARTBEAT FROM 1000: 9 |
| | | |
| | | ``` |
| | | |
| | | 打开一个客户端,连接心跳中心 |
| | | ``` |
| | | $ ./dgram_mod_survey client 3 |
| | | |
| | | SEND HEART:0 |
| | | SEND HEART:1 |
| | | SEND HEART:2 |
| | | SEND HEART:3 |
| | | SEND HEART:4 |
| | | SEND HEART:5 |
| | | SEND HEART:6 |
| | | SEND HEART:7 |
| | | SEND HEART:8 |
| | | SEND HEART:9 |
| | | |
| | | ``` |
| | | |
| | | |
| | | # 2. 接口说明 |
| | | |
| | | shm_mm.h |
| | | ``` |
| | | /** |
| | | * 初始化共享内存 |
| | | * @size 共享内存大小, 单位M |
| | | * |
| | | */ |
| | | void shm_init(int size); |
| | | |
| | | /** |
| | | * 销毁共享内存 |
| | | * 整个进程退出时需要执行这个方法,该方法首先会检查是否还有其他进程在使用该共享内存,如果还有其他进程在使用就只是detach,如果没有其他进程在使用则销毁整块内存。 |
| | | */ |
| | | void shm_destroy(); |
| | | ``` |
| | | |
| | | dgram_mod_socket.h |
| | | ``` |
| | | |
| | | /** |
| | | * 创建socket |
| | | * @return socket地址 |
| | | */ |
| | | void *dgram_mod_open_socket(); |
| | | |
| | | /** |
| | | * 关闭socket |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_close_socket(void * _socket); |
| | | |
| | | /** |
| | | * 绑定端口到socket, 如果不绑定则系统自动分配一个 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_bind(void * _socket, int port); |
| | | |
| | | /** |
| | | * 发送信息 |
| | | * @port 发送给谁 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_sendto(void *_socket, const void *buf, const int size, const int port); |
| | | |
| | | |
| | | /** |
| | | * 接收信息 |
| | | * @port 从谁哪里收到的信息 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_recvfrom(void *_socket, void **buf, int *size, int *port); |
| | | |
| | | /** |
| | | * 发送请求信息并等待接收应答 |
| | | * @port 发送给谁 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_sendandrecv(void * _socket, const void *send_buf, const int send_size, const int port, void **recv_buf, int *recv_size) ; |
| | | |
| | | |
| | | /** |
| | | * 启动bus |
| | | * |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_start_bus(void * _socket); |
| | | |
| | | /** |
| | | * 订阅指定主题 |
| | | * @topic 主题 |
| | | * @size 主题长度 |
| | | * @port 总线端口 |
| | | */ |
| | | int dgram_mod_sub(void * _socket, void *topic, int size, int port); |
| | | |
| | | /** |
| | | * 发布主题 |
| | | * @topic 主题 |
| | | * @content 主题内容 |
| | | * @port 总线端口 |
| | | */ |
| | | int dgram_mod_pub(void * _socket, void *topic, int topic_size, void *content, int content_size, int port); |
| | | |
| | | |
| | | /** |
| | | * 获取soket端口号 |
| | | */ |
| | | int dgram_mod_get_port(void * _socket) ; |
| | | |
| | | |
| | | /** |
| | | * 释放存储接收信息的buf |
| | | */ |
| | | void dgram_mod_free(void *buf) ; |
| | | ``` |
| | | |
| | | |
| | | ./build.sh doc |
| | | ``` |