ACE 开发者
文章
日志
文件
圈子
论坛
业内新闻
意见建议
求职招聘
.Net技术
项目管理经验交流
常用工具
IBM Rational
敏捷技术
数据库
中间件
P2P技术
服务器端程序开发
Tcp/IP和Socket
C++学习
开发心得和读书笔记
ACE综合应用
ACE基础应用
海阔天空
您的位置:
ACE 开发者
>>
论坛
>>
ACE综合应用
>>
查看帖子
字体:
小
中
大
Reactor and Proactor process reconnect
peakzhang 发表于: 2008-9-09 19:10 来源:
ACE 开发者
当客户端重新连接的时候,对于Reactor 和Proactor怎样处理新的连接,是不是生成新的Event Handler实例或是Complete Handler实例?
那么原有的实例怎样处理?删除还是保留?处理数据状态是否保留??
最新回复
peakzhang at 2008-9-09 19:10:20
这个问题,是这样,依赖于你的实现,ACE的灵活性就体现在这个地方。
如果在handle_close的时候,你删除了处理器,那么当然要在重新连接的时候重新创建处理器。
如果你缓冲使用了处理器,那么你需要重置处理器的内部处理状态,再次使用。TCP不关心你是否已经连接过,只要是断开后连接,一视同仁,视为新TCP连接。
peakzhang at 2008-9-09 19:10:29
还不是很清晰。
这样,我描述一个场景,然后看一看应该怎样设计和实现。
比如server端使用Reactor模式。我的处理器Client_Service只是简单的把每个客户端的发送过来的文件数据写到本地磁盘上,并且每个客户端对应的文件名称和路径不相同。
开始,比如有三个客户端连接过来,生成三个Client_Service实例,每个实例对象都在写文件,这时,其中一个客户端由于网络原因断开了,客户端马上重新连接,一段时间后,比如3秒,网络恢复,那么客户端连接成功,继续发送文件,而不是重新发送文件。
那么server端应该怎样处理?
peakzhang at 2008-9-09 19:10:37
这个问题很简单。首先你必须能够识别你的客户端和文件,必须有IP、文件的对应关系。
你的服务器端,在客户端连接的时候,能够知道它上次是否已经发过部分数据了,如果是新的就直接发送,如果是续传,就继续写入旧的文件。没有自定义协议的支持,光靠TCP自身,解决起来很麻烦,因为难以有对应关系存在。
查看全部回复
我也来说两句
最新更新主题
ACE_Proactor在DLL中使时,事件不能响应!...
linux下无ACE_SSL_Asynch_Read_Stream_...
编译proactor+ssl出现的错误
问个问题,有关线程的挂起
ace中遇到的两个棘手问题
proactor 中HANDLER 的退出问题
hp unix安装错误~~~
Proactor 如何结合 openssl 使用?...
Naming Service用途大么?
HP-unix下编译ACE出问题,求教!...
月度关注热点
ACE_Proactor在DLL中使时,事件不能响应!...
最新回复
如果在handle_close的时候,你删除了处理器,那么当然要在重新连接的时候重新创建处理器。
如果你缓冲使用了处理器,那么你需要重置处理器的内部处理状态,再次使用。TCP不关心你是否已经连接过,只要是断开后连接,一视同仁,视为新TCP连接。
这样,我描述一个场景,然后看一看应该怎样设计和实现。
比如server端使用Reactor模式。我的处理器Client_Service只是简单的把每个客户端的发送过来的文件数据写到本地磁盘上,并且每个客户端对应的文件名称和路径不相同。
开始,比如有三个客户端连接过来,生成三个Client_Service实例,每个实例对象都在写文件,这时,其中一个客户端由于网络原因断开了,客户端马上重新连接,一段时间后,比如3秒,网络恢复,那么客户端连接成功,继续发送文件,而不是重新发送文件。
那么server端应该怎样处理?
你的服务器端,在客户端连接的时候,能够知道它上次是否已经发过部分数据了,如果是新的就直接发送,如果是续传,就继续写入旧的文件。没有自定义协议的支持,光靠TCP自身,解决起来很麻烦,因为难以有对应关系存在。