找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3518|回复: 3

Reactor模式下发送数据

[复制链接]
发表于 2010-7-29 09:36:01 | 显示全部楼层 |阅读模式
小弟刚学reactor模式,也看了一些例子,想用它来写一个服务端的程序,我现在只知道接收数据的时候可以在handle_input中实现,那么发送数据该怎么做呢?我指的是外部模块怎么调用我的方法,发送内容由外面传进来。因为reactor在接受连接的时候会为每一个连接生成一个处理器,外部调用的时候该怎么去获得每个连接的句柄?是在连接的时候就放入一个容器里面吗?请大牛指教,谢谢~
发表于 2010-7-29 10:29:07 | 显示全部楼层
这就要具体看你的设计了。
每个链接都会产生一个句柄,而你需要对每个句柄进行记录,当需要数据发送的时候,发送给哪个句柄。
最简单的ace的reactor模型,你可以利用Handler的Queue,将你的数据putQ到你的发送队列中,然后再handler_output()方法中getQ获得你要发送的数据内容。从而实现发送。
handle_input()和handler_output()实际是指一个调取的事件接口,至于数据的发送,你还需要自己去send()。
当然,在Reactor某些模式下,你可以直接Send而不去放入队列,这也是可以的。
建议你看看《ACE程序指南》,里面的代码写的比较清楚。
 楼主| 发表于 2010-7-29 11:37:40 | 显示全部楼层
谢斑竹,我去试试!
 楼主| 发表于 2010-7-30 11:21:01 | 显示全部楼层
本帖最后由 zhuzhenlei 于 2010-7-30 11:25 编辑

回复 2# freeeyes
斑竹,我在主程序里面调用了run_reactor_event_loop()之后程序就一直等待了,在这之后我该怎么填充队列或者执行发送呢,我看了书里面的发送操作都是在handle_input里面执行的,可是我要的效果是主程序里面调用,该怎么解决呢?难道还是要开一个线程做这个等待工作吗?谢谢~
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-22 08:22 , Processed in 0.013705 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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