zhuzhenlei 发表于 2010-7-29 09:36:01

Reactor模式下发送数据

小弟刚学reactor模式,也看了一些例子,想用它来写一个服务端的程序,我现在只知道接收数据的时候可以在handle_input中实现,那么发送数据该怎么做呢?我指的是外部模块怎么调用我的方法,发送内容由外面传进来。因为reactor在接受连接的时候会为每一个连接生成一个处理器,外部调用的时候该怎么去获得每个连接的句柄?是在连接的时候就放入一个容器里面吗?请大牛指教,谢谢~

freeeyes 发表于 2010-7-29 10:29:07

这就要具体看你的设计了。
每个链接都会产生一个句柄,而你需要对每个句柄进行记录,当需要数据发送的时候,发送给哪个句柄。
最简单的ace的reactor模型,你可以利用Handler的Queue,将你的数据putQ到你的发送队列中,然后再handler_output()方法中getQ获得你要发送的数据内容。从而实现发送。
handle_input()和handler_output()实际是指一个调取的事件接口,至于数据的发送,你还需要自己去send()。
当然,在Reactor某些模式下,你可以直接Send而不去放入队列,这也是可以的。
建议你看看《ACE程序指南》,里面的代码写的比较清楚。

zhuzhenlei 发表于 2010-7-29 11:37:40

谢斑竹,我去试试!

zhuzhenlei 发表于 2010-7-30 11:21:01

本帖最后由 zhuzhenlei 于 2010-7-30 11:25 编辑

回复 2# freeeyes
斑竹,我在主程序里面调用了run_reactor_event_loop()之后程序就一直等待了,在这之后我该怎么填充队列或者执行发送呢,我看了书里面的发送操作都是在handle_input里面执行的,可是我要的效果是主程序里面调用,该怎么解决呢?难道还是要开一个线程做这个等待工作吗?谢谢~
页: [1]
查看完整版本: Reactor模式下发送数据