现在的位置: 首页 > 综合 > 正文

一个心跳保活类的设计—改进

2013年10月26日 ⁄ 综合 ⁄ 共 715字 ⁄ 字号 评论关闭

前面设计了一个心跳保活类,如果它仅仅用作保活机制,那未免有点太大材小用了,因此可以考虑使用它来传递消息,目前只要服务器有回复就说明服务仍然在,但是我设计出了CON_RESULT结构:

typedef struct{ //保存心跳反馈的结果

int m_iHeartBeat;

int m_iStatus;

}CON_RESULT,*PCON_RESULT;

为何不将这个结构协议化呢?也就是说让服务器直接发送这个结构过来,这个结构中携带一些信息,其实完全没有必要用两个字段,一个字段就可以说明问题,用位域来表示就可以了,也就是说直接用一个int类型的整数就可以说明问题,服务器传来一个int类型的整型数据,按照事先的协商每一个位表示一个消息就可以了,典型的应用如下:服务器监听多个端口,比如8000,8001,8002,8003,其中8000为心跳端口,但是客户端不能以8000端口的连接状况来确定整个服务器的状态,比如8000心跳端口虽然保持连接但是不能保证别的端口保持连接,客户端这边的自然不必说,如果自己断开自己肯定知道,服务器那边断开了怎么知道呢?当然可以通过socket接口函数知道,如果不用socket机制的话,就可以采用服务器主动通知的方式告诉客户端,这个通知数据包就通过心跳包来传递。服务器那边的典型设置就是一个端口开一个线程,所有的端口的连接状态通过一个静态的或者全局的变量容器来维持,服务器在回复心跳包的时候将各个端口的连接状态作为数据回复给客户端,具体哪个位或者结构的哪个字段代表哪个端口就由自定义协议协商规定了,这样一来,客户端通过心跳包的回复数据就可以得知服务器的各个端口的连接情况,根据不同的状况做出不同的善后处理工作。

抱歉!评论已关闭.