Acceptor模式,如何处理客户端异常断开?
之前用Acceptor模式开发的时候,客户端会有异常断开的情况(硬件重启,类似于直接拔网线),无法收到close信号。
也因此无法正常关闭连接。
我在Acceptor内部利用心跳来判断连接是否正常,如果不正常则关闭
但是有时候仍然存在问题,会导致Acceptor线程退出。
请问在这种情况下应该怎样处理这种异常? 利用心跳信号来处理是正解.
即可以处理你说的那种异常,也可以处理长时间发呆的用户,从服务端断开连接.
我不清楚你说的"仍存在问题"是怎么一回事?可能是使用ACE不当引起的吧. 因为是颇久之前的代码了,花了点时间去找。
最初的时候是在Acceptor之外启动了一个线程来检查心跳,
如果超时则关闭。
大概是由于在Acceptor线程之外关闭,造成Acceptor线程终止。
后来利用notify函数扔一个EXCEPT_MASK信号过去,
处理线程收到这个信号后就自行退出,
但是同样会有不正常退出的情况。
后来被迫自己实现了一套Acceptor机制……
应该怎么在Acceptor线程内部对这种情况进行处理呢? 心跳可以使用应用级别的协议来处理,和正常的数据一样处理就可以了。
页:
[1]