您的位置:首页 > 编程语言

DC4C代码阅读(5)——计算节点

2016-02-20 16:19 288 查看
码结构和注册节点类似

计算节点的主要流程:

1、在main函数中设置信号处理函数、把自己转换为守护进程、创建子进程组(一台主机中可以有多个计算节点),父进程负责监控子进程的运行,子进程组则提供了具体的服务

2、在子进程中,创建并初始化监听套接字,非阻塞的连接注册节点,然后进行循环开始等待事件的发生

3、在每次循环中,第一步是连接注册服务器,这样做是有原因的,由于网络等原因,注册节点发送给计算节点心跳包有可能丢失,如果连续丢失达到指定次数,注册节点就会断开计算节点的连接,为了防止这种情况产生,每次循环的时候都检验自己和注册节点是否仍然连接,如果断开了,那么重链

4、在处理的过程中我们要区分几种不同的套接字:

(1)listen套接字,用于监听等到用户节点的到来

(2)connect套接字,连接到注册节点的套接字

(3)accpet套接字,任意一个时刻,一个计算节点都只能有一个用户节点在使用,正在使用的这个用户的套接字就是accpet套接字,其他连接到计算节点,但是不能做任何事的套接字叫做野生套接字

(4)executing套接字,计算节点执行用户的任务时是创建一个新进程去执行,这个新创建的进程和计算节点之间的通信是通过管道进行的,即executing套接字

(5)野生套接字,某些用户节点连接到计算节点,但是此时计算节点正在执行任务,于是这个套接字什么事情都不能干,这样的套接字叫做野生套接字

5、等待所有的套接字的事件的发生

(1)listen套接字

1)读事件。表示有用户节点连接进来。

2)其他事件。表示出错,结束循环,退出进程。

(2)connect套接字

1)读事件。表示注册节点发送信息过来。处理读事件,例如心跳包,状态查询等等

2)写事件。

(3)accept套接字

1)读事件。表示用户节点发送过来的请求。一般是执行程序的请求,下面针对执行程序的请求说明一下它的流程。

a)校验本地程序的md5和用户节点发送过来的md5是否匹配

b)如果md5不匹配,那么将会要求用户节点重新部署程序。

c)md5匹配,创建一个子进程,并创建管道,开始执行用户程序,管道描述符添加到套接字集合中并使用epoll等待它的事件。

d)程序执行结束会向管道发送信息,因此epoll套接字会监听到事件的发生,并根据此判断程序是否运行结束。

2)写事件。

(4)executing套接字

1)读事件。运行用户节点任务的子进程发送的消息事件,可能是执行完毕,或者出错。

2)其他事件。表示出错

(5)野生套接字

1)不处理任何事件。

(6)处理心跳包。

6、离开循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: