一种基于TCP/IP通信协议的在线客户端数量的统计系统及方法与流程

文档序号:12131701阅读:来源:国知局

技术特征:

1.一种基于TCP/IP通信协议的在线客户端数量的统计系统,其特征在于,包括:服务器及与所述服务器TCP连接的至少一客户端,所述服务器用于创建动态链表,所述动态链表包括一头结点和若干子结点,以所述头结点为起始,每个结点通过指针域next依次串联构成所述动态链表,每个结点包括:客户端数据域和存储下一个结点地址的指针域next;

所述服务器通过调用epoll_wait函数,判断所述客户端是否有通信事件触发,若是,退出epoll_wait函数,遍历并处理所述通信事件;若否,采用阻塞的方式等待客户端通信事件的触发;

其中,所述通信事件包括新的客户端发起TCP连接请求事件、已经建立连接的客户端断开TCP连接的事件、已经建立TCP连接的客户端有上线命令传输的事件、已经建立TCP连接的客户端有心跳包命令传输的事件、及心跳包监测的定时器中断服务事件。

2.根据权利要求1所述的基于TCP/IP通信协议的在线客户端数量的统计系统,其特征在于,每个结点的长度等于当前与所述服务器建立TCP连接的客户端数量。

3.根据权利要求1所述的基于TCP/IP通信协议的在线客户端数量的统计系统,其特征在于,所述客户端数据域包括:存储所述客户端ID的字符数组类型变量id,存储所述服务器给当前上线客户端分配的socket文件描述符的整型变量fd,用于所述服务器心跳包丢失统计的整型变量heartbeat_lost_count。

4.一种基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,包括下述步骤:

步骤S110:对所述服务器Socket通信参数进行初始化;

步骤S120:所述服务器建立并监听socket套接字描述符socket_fd;

步骤S130:对所述服务器的模型epoll进行初始化;

步骤S140:所述服务器创建动态链表并启动控制心跳包的系统定时器;

步骤S150:所述服务器调用epoll_wait函数,并判断所述客户端是否有通信事件触发,若是,退出epoll_wait函数,所述服务器遍历并处理所述通信事件;若否,采用阻塞的方式等待客户端通信事件的触发;

其中,所述动态链表包括一头结点和若干子结点,以所述头结点为起始,每个结点通过指针域next依次串联构成所述动态链表,每个结点包括:客户端数据域和存储下一个结点地址的指针域next;

其中,所述通信事件包括新的客户端发起TCP连接请求事件、已经建立连接的客户端断开TCP连接的事件、已经建立TCP连接的客户端有上线命令传输的事件、已经建立TCP连接的客户端有心跳包命令传输的事件、及心跳包监测的定时器中断服务事件。

5.根据权利要求4所述的基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,在步骤S150中,所述服务器遍历并处理所述通信事件,当所述通信事件为新的客户端发起TCP连接请求命令,具体包括下述步骤:

epoll_wait函数发现触发待处理的事件刚好等于监听套接字描述符socket_fd;

根据socket_fd调用accept函数返回新的socket套接字描述符,记为fd;

将侦听到的fd通过epoll_ctl函数添加到epoll句柄当中。

6.根据权利要求4所述的基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,在步骤S150中,所述服务器遍历并处理所述通信事件,当所述通信事件为已经建立连接的客户端断开TCP连接的事件,具体包括下述步骤:

epoll_wait函数发现触发待处理的事件为socket套接字描述符,记为fd;

根据fd调用read函数;

判断read函数返回值是否等于0,若是,进行下一步;若否,进行其他事务处理;

根据发起断开请求的客户端的fd查找结点所在位置,并将结点从所述动态链表中删除。

7.根据权利要求4所述的基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,在步骤S150中,所述服务器遍历并处理所述通信事件,当所述通信事件为已经建立TCP连接的客户端有上线命令传输的事件,具体包括下述步骤:

epoll_wait函数发现触发待处理的事件为socket套接字描述符,记为fd;

根据fd调用read函数;

判断read函数返回值是否大于0,若是,进行下一步;若否,进行其他处理;

判断数据包是否为HEL;xxxxxxxxxxx;@的格式,其中,HEL是hello的缩写,xxxxxxxxxxx是所述客户端的ID,用分号";"隔开,最后以@结束,若是,进行下一步;若否,进行其他事务处理;

对所述xxxxxxxxxxx和分配该客户端的fd进行提取,以开辟新结点,并将所述xxxxxxxxxxx和fd分别存储到新结点的id和fd中,且将heartbeat_lost_count初始化为0;

将所述新节点添加到所述动态链表的结尾。

8.根据权利要求4所述的基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,在步骤S150中,所述服务器遍历并处理所述通信事件,当所述通信事件为已经建立TCP连接的客户端有心跳包命令传输的事件,具体包括下述步骤:

epoll_wait函数发现触发待处理的事件为socket套接字描述符,记为fd;

根据fd调用read函数;

判断read函数返回值是否大于0,若是,进行下一步;若否,进行其他处理;

判断数据包是否为HEART;xxxxxxxxxxx;@的格式,其中,xxxxxxxxxxx是所述客户端的ID,用分号";"隔开,最后以@结束,若是,进行下一步;若否,进行其他事务处理;

根据客户端的ID查找客户端所在的动态链表中的结点位置;

将查到的和该客户端对应结点中的heartbeat_lost_count清零。

9.根据权利要求4所述的基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,在步骤S150中,所述服务器遍历并处理所述通信事件,当所述通信事件为心跳包监测的定时器中断服务事件,具体包括下述步骤:

判断当前遍历到的结点地址是否等于NULL;若是进下一步;

给所述动态链表中当前遍历到结点的heartbeat_lost_count按1步进递增;

判断heartbeat_lost_count是否大于5,若是,进行下一步;若否,遍历下一个结点;

判定为超时未发送心跳包,根据客户端的fd查找结点所在位置并将结点从动态链表中删除;

遍历下一个结点,并返回第一步。

10.根据权利要求4所述的基于TCP/IP通信协议的在线客户端数量的统计方法,其特征在于,每个结点的长度等于当前与所述服务器建立TCP连接的客户端数量,所述客户端数据域包括:存储所述客户端ID的字符数组类型变量id,存储所述服务器给当前上线客户端分配的socket文件描述符的整型变量fd,用于所述服务器心跳包丢失统计的整型变量heartbeat_lost_count。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1