想实现一个实时系统,系统内部通信机制如下:
1、服务器跟客户端采用“一问一答”的消息传输方式,任何一方收到对方发来的消息(命令),均要进行应答,表示“我接收到了”,对于主动发送消息的一方,在指定的时间内,未收到对方的应答,将对此条消息进行重发;
2、任何一方在未收到对方上一条消息应答之前,不会继续向对方发送下一条消息,新的消息储存在消息队列中,当应答返回后,再从队列中发送下一条消息;
3、如果任何一方经过一定次数消息重发,对方仍未进行响应,将主动断开这个连接;
4、服务器跟客户端保持定时的消息交换,如果在最后一次消息通信后,没有任何消息通信,服务器将定时发送“保持活跃”消息。如果经过若干次重发后,客户端始终没有应答,服务器将主动“断开”当前连接。服务器端采用重叠I/O模型,投递WSARecv和WSASend到重叠结构上,分别在两个线程中分别处理收、发重叠I/O操作,将未收到应答的收、发信息记录在队列中(该队列存储的是一个结构体队列,结构体中包括对应的SOCKET、上次收发时间、发送次数以及指向存放收发内容的内存的指针等信息,重发信息不记录),同时在一个事件队列中登记相应的事件,在另一个线程中不停循环检测各个连接中未完成应答,检查是否超时或超次,若超时则触发事件,发送线程接收到事件后进行重发;若超次则断开连接。不知道这样是否可行?是否有更好的解决办法?