paper4—Multi-MPE_Trigger_Algorithm—testing
2016-05-04 20:58
471 查看
在同一台电脑测试:
[client-manet.c] send to
[(MASTER) handle_client(void *arg) IN server-manet.c] send to
[(MASTER) m_thread(void *arg) IN server-manet.c] send to
[(SLAVE) slave(void *arg) IN server-manet-slave.c]
启动顺序:
[root@localhost server-client-pthread-c]# ./server-manet
[root@localhost server-client-pthread-c]# ./server-manet-slave
[root@localhost server-client-pthread-c]# ./client-manet
++++++++++++++++++++++++++++++++++++++++++++++
在CORE中测试时:
1. 在每个节点的主目录创建文件: ctrl.txt, masterip.txt, hosts,
根据batman-adv协议,选择 主节点,其它为从节点;要修改 上面3个文件的值
[client-manet.c] send to
[(MASTER) handle_client(void *arg) IN server-manet.c] send to
[(MASTER) m_thread(void *arg) IN server-manet.c] send to
[(SLAVE) slave(void *arg) IN server-manet.c]
[client-manet.c] send to
[(MASTER) handle_client(void *arg) IN server-manet.c] send to
[(MASTER) m_thread(void *arg) IN server-manet.c] send to
[(SLAVE) slave(void *arg) IN server-manet-slave.c]
启动顺序:
[root@localhost server-client-pthread-c]# ./server-manet
[root@localhost server-client-pthread-c]# ./server-manet-slave
[root@localhost server-client-pthread-c]# ./client-manet
++++++++++++++++++++++++++++++++++++++++++++++
在CORE中测试时:
1. 在每个节点的主目录创建文件: ctrl.txt, masterip.txt, hosts,
根据batman-adv协议,选择 主节点,其它为从节点;要修改 上面3个文件的值
[client-manet.c] send to
[(MASTER) handle_client(void *arg) IN server-manet.c] send to
[(MASTER) m_thread(void *arg) IN server-manet.c] send to
[(SLAVE) slave(void *arg) IN server-manet.c]
//******************** client-manet.c int main(int argc, char *argv[]) { masterip <- read from masterip.txt; //global variable, echo 1.1.1.1 >masterip.txt connect(sock, masterip); CHK(send(sock, "running process, update database", strlen("running process, update database"), 0)); } //******************** client-manet.c
//******************** server-manet.c int ctrl; //global variable int changed=0; int pipe_fd[2]; char *masterip; char *self_ip; //read * from client-manet.c //模拟 流程执行,数据库更新的事件,事件驱动 数据库同步 void *handle_client(void *arg) { bind(listener, self_ip); int pipe_write = *((int *)arg); while (1) { CHK2(client, accept(listener, (struct sockaddr *)&peer, &socklen)); while (1) { CHK2(len, recv(client, clientmsg, CLIENTMSG_SIZE, MSG_NOSIGNAL)); CHK(write(pipe_write, clientmsg, strlen(clientmsg))); //send MSG to m_thread(void *arg) } } } int main(int argc, char *argv[]) { sprintf(self_ip,"%s",getipaddress("enp13s0")); pthread_create(&readctrl, NULL, read_ctrl, NULL); pthread_create(&writer, NULL, handle_client, (void *)&pipe_fd[1]); while (1) { pthread_create(&tid, NULL, master, NULL); //ctrl==1 or pthread_create(&tid, NULL, slave, NULL); //ctrl==0 } } void *read_ctrl(void *arg) { while (1) { ctrl <- read from ctrl.txt; //global variable, echo 1 >ctrl.txt masterip <- read from masterip.txt; //global variable, echo 1.1.1.1 >masterip.txt master_ip = ip2uint(getipaddress(masterip)); if (master_ip!=prev_ip) { replaceline(hosts, line, "masterip mpe.localhost"); //update hosts } } } void *slave(void *arg) { connect(sock, masterip); while (1) { if (changed) break; recv(sock, buf, BUF_SIZE, MSG_NOSIGNAL); //read * from master } } void *master(void *arg) { sprintf(self_ip,"%s",getipaddress("enp13s0")); bind(listener, self_ip); while (1) { if (changed) break; CHK2(client, accept(listener, (struct sockaddr *)&peer, &socklen)); int rt = pthread_create(&reader, NULL, m_thread, (void *)&client); } } //event_driven, read pipe_fd[0] from handle_client(void *arg) which read * from client-manet.c void *m_thread(void *arg) { int client = *((int *)arg); CHK(epoll_ctl(epfd, EPOLL_CTL_ADD, pipe_fd[0], &ev)); //使用epoll模拟 流程执行,数据库更新的事件,事件驱动 数据库同步 while (1) { //communication between master & slave if (changed) break; if((epoll_events_count = epoll_wait(epfd, events, 1, EPOLL_RUN_TIMEOUT)) < 0){ sleep(1); continue; } for (int i = 0; i < epoll_events_count; i++) { if (events[i].data.fd == pipe_fd[0]) //管道读端,从client-manet.c接受信息 { CHK2(res, read(pipe_fd[0], clientmsg, CLIENTMSG_SIZE)); CHK(send(client, "synchronous data", strlen("synchronous data"), MSG_NOSIGNAL)); } } } } //******************** server-manet.c
//******************** server-manet-slave.c int main(int argc, char *argv[]) { sprintf(self_ip,"%s",getipaddress("enp13s0")); pthread_create(&readctrl, NULL, read_ctrl, NULL); while (1) { pthread_create(&tid, NULL, slave, NULL); pthread_join(tid, &tret); } //end while } void *read_ctrl(void *arg) { char filename[6] = "hosts"; //set master_ip in /etc/hosts uint32_t me_ip = ip2uint(getipaddress("enp13s0")); while (1) { ctrl <- read from ctrl_slave.txt; //global variable, echo 0 >ctrl_slave.txt masterip <- read from masterip.txt; //global variable, echo 1.1.1.1 >masterip.txt master_ip = ip2uint(getipaddress(masterip)); if (master_ip!=prev_ip) { replaceline(hosts, line, "masterip mpe.localhost"); //update hosts } } } void *slave(void *arg) { connect(sock, masterip); while (1) { if (changed) break; recv(sock, buf, BUF_SIZE, MSG_NOSIGNAL)); } } //******************** server-manet-slave.c
相关文章推荐
- paper4—Multi-MPE_Trigger_Algorithm
- paper3—Algorithm2-Engine-Trigger-on-SMD—temp
- paper3—Algorithm1-Engine-Trigger-on-FCD—temp
- POJ 2195 Going Home(最小权匹配、KM算法)
- Spark组件之GraphX学习15--we-Google.txt大图分析
- Django笔记:1.创建一个项目
- 使用visual studio code开发Go程序
- Go--基础知识学习二
- 在Visual Studio Code中配置GO开发环境
- Windows环境下vscode-go安装笔记
- Leangoo大讲堂:免费Scrum敏捷开发实战—武汉站
- GO--基础知识学习一
- Go 性能优化技巧 9/10
- Go 性能优化技巧 8/10
- Go 性能优化技巧 7/10
- Go 性能优化技巧 6/10
- Go 性能优化技巧 5/10
- Go 性能优化技巧 4/10
- Go 性能优化技巧 3/10
- Go 性能优化技巧 2/10