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