找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 6594|回复: 1

reactor模式跟socket是阻塞还是非阻塞有没有必然联系?

[复制链接]
发表于 2008-9-9 19:21:58 | 显示全部楼层 |阅读模式
请教一下各位,reactor模式跟socket是阻塞还是非阻塞有没有必然联系?
使用reactor模式,send_n以后是否有必要看看是否将数据全部发送出去,如果没发送完,注册WRITE_MASK ,在handle_output时处理?
 楼主| 发表于 2008-9-9 19:22:12 | 显示全部楼层
我的理解,没有什么联系。Reactor是框架,反应式的。它只是很好的封装了Socket的收取、发送和各种异常情况,使用回调进行通知处理。
一般不推荐使用send_n,因为会影响性能或者产生阻塞。请注意同步、异步,阻塞、非阻塞的差别,它们是不同的。如果你用了send_n和recv_n,函数会一直等到数据传递完毕或者出现异常、超时。我一般是把收发设置成非阻塞,使用send和recv,无论收发多少,直接返回,对余下的数据进行判断,进入队列,下次处理。当然,这样做代码会复杂不少。有的场合用send_n反而是最佳选择了。
程序员指南中,对这种办法,有很细致的描述,ACE自身携带的源码包中,有代码展示。ACE\ACE_wrappers\examples\APG\
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-4 01:47 , Processed in 0.957902 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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