找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4132|回复: 3

Acceptor模式,如何处理客户端异常断开?

[复制链接]
发表于 2008-1-11 11:06:33 | 显示全部楼层 |阅读模式
之前用Acceptor模式开发的时候,
客户端会有异常断开的情况(硬件重启,类似于直接拔网线),无法收到close信号。
也因此无法正常关闭连接。

我在Acceptor内部利用心跳来判断连接是否正常,如果不正常则关闭
但是有时候仍然存在问题,会导致Acceptor线程退出。

请问在这种情况下应该怎样处理这种异常?
 楼主| 发表于 2008-1-11 11:06:42 | 显示全部楼层
利用心跳信号来处理是正解.

即可以处理你说的那种异常,也可以处理长时间发呆的用户,从服务端断开连接.

我不清楚你说的"仍存在问题"是怎么一回事?可能是使用ACE不当引起的吧.
 楼主| 发表于 2008-1-11 11:07:11 | 显示全部楼层
因为是颇久之前的代码了,花了点时间去找。

最初的时候是在Acceptor之外启动了一个线程来检查心跳,
如果超时则关闭。
大概是由于在Acceptor线程之外关闭,造成Acceptor线程终止。

后来利用notify函数扔一个EXCEPT_MASK信号过去,
处理线程收到这个信号后就自行退出,
但是同样会有不正常退出的情况。

后来被迫自己实现了一套Acceptor机制……

应该怎么在Acceptor线程内部对这种情况进行处理呢?
 楼主| 发表于 2008-1-11 11:07:51 | 显示全部楼层
心跳可以使用应用级别的协议来处理,和正常的数据一样处理就可以了。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 07:06 , Processed in 0.017601 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表