#
BHomeBus 使用指南
## 1. BHomeBus包含的角色
- NetProxyService(网络代理服务): 负责跨机器转发发布或请求消息
- BusService(总线服务): 发布订阅的路由,负责记录订阅者的消息并把发布者发布的消息转发给感兴趣的订阅者。
- Pub/Sub Client(发布订阅客户端): 向BusService发布消息或者在BusService上订阅感兴趣的消息
- Request/Reply Client (请求应答客户端):向其他机器/进程发送请求消息或者从其他机器/进程接受应答消息
其中BusService和NetProxyService是服务进程,使用者把它起来后就不需要关心了。使用者主要关注的是Pub/Sub Client 和 Request/Reply Client
## 2. 使用说明
具体每个方法的及其参数的说明可以参看它们对应的头文件。
使用时,每台主机都需要先把BusService和NetProxyService这两个服务启动起来。因为后面的功能都依赖这两个服务。
### 2.1 启动NetProxyService
NetProxyService的头文件是 net_mod_server_socket_wrapper.h. 下面的代码启动端口是5000的网络代理服务
```
void *serverSocket = net_mod_server_socket_open(5000);
if(net_mod_server_socket_start(serverSocket) != 0) {
err_exit(errno, "net_mod_server_socket_start");
}
```
### 2.2 启动BusService
BusService的头文件是bus_server_socket_wrapper.h, 下面是启动Bus服务的代码.
```
void * server_socket = bus_server_socket_wrapper_open();
if(bus_server_socket_wrapper_start_bus(server_socket) != 0) {
printf("start bus failed\n");
exit(1);
}
```
### 2.3 Request/Reply 用例说明
Pub/Sub Client 和 Request/Reply Client的头文件都是 net_mod_socket_wrapper.h
现在模拟一个场景,A向B和C发送一个请求,B和C收到请求后分别返回一个响应给A 。假设A的IP是192.168.20.101,B的IP是192.168.20.102, C的IP是192.168.20.103, 它们的key都是100, 代理server的端口是5000。
A 的代码如下:
```
int recv_arr_size, n;
net_mod_recv_msg_t *recv_arr;
const char* content = "HELLO WORLD!":
net_mod_socket_bind(client, 100);
net_node_t node_arr = {
{"192.168.20.102", 5000, 100},
{"192.168.20.103", 5000, 100}
};
int node_arr_size = 2;
void *client = net_mod_socket_open();
n = net_mod_socket_sendandrecv(client, node_arr, node_arr_size,
content, strlen(content), &recv_arr, &recv_arr_size);
printf(">>> %d nodes reply\n", n);
for(i=0; i