我使用的是CAsyncSocket,现在的实现是这样的,在Mainframe有个pLink的指针,
在CSocketLink::OnReceive()时,将this赋给pLink,这时在Mainframe下操作pLink可以正常的返回数据给客户端。当有其他客户端发送数据过来,Mainframe下的pLink又会被替换掉发送其他的数据。请问,这种设计方案合适吗?还有,我用的是TCP长连接,如果突然拔网线或者断电,这时双方是不知道socket已经close掉的,那么服务端会一直保存着这个socket,这时候该如果检测呢?如果用定时器,岂不是每个客户端都得设置一个定时器定期检查,要是客户端多了,定时器的数据不就很夸张?
在CSocketLink::OnReceive()时,将this赋给pLink,这时在Mainframe下操作pLink可以正常的返回数据给客户端。当有其他客户端发送数据过来,Mainframe下的pLink又会被替换掉发送其他的数据。请问,这种设计方案合适吗?还有,我用的是TCP长连接,如果突然拔网线或者断电,这时双方是不知道socket已经close掉的,那么服务端会一直保存着这个socket,这时候该如果检测呢?如果用定时器,岂不是每个客户端都得设置一个定时器定期检查,要是客户端多了,定时器的数据不就很夸张?
“开一个线程检查所有客户端”,是指定时遍历一下所有已经连接到服务端的socket么?
定时器不需要为每个客户端都开,基本上开一个枚举所有socket超时状态就可以了
你只要把IP和端口号做一个组合存到map里即可,
收到客户端请求时查询map。
我猜测CAsyncSocket一定有超时机制,超时后执行OnClose函数。
去查一下MSDN吧或在百度里搜索一下