找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3001|回复: 2

关于Winson的C/S传输程序最终版的一些问题

[复制链接]
发表于 2007-12-31 22:32:36 | 显示全部楼层 |阅读模式
问题1:这种服务端的处理模式是否是一般常用服务端的处理模式。比如说在Acceptor-Connector框架上。
问题2: ACE_Server.cpp中大体是用一个ACE_TP_Reactor来响应客户连接。但在Request_Handler.cpp中的构造函数的ACE_Thread_Manager *thr_mgr是主要考虑到对以后扩展有什么用途呢?是不是构造函数中的实现应放在open中进行。
问题3: 这是我学习到的所以我提出了问题1,在Request_Handler::handle_input中接收完整包数据后,打包成消息放入到一任务的消息队列中。这种处理是常用的做法吗。
问题4: Task_Manager.cpp中Task_Manager::svc()中生成一些线程进行对消息的处理。如果在处理过程中需要发送数据给客户端怎么样实现像书上说的用reactor和msg的通知策略直接响应Request_Handler::handle_output函数呢?
问题5: Task_Manager.cpp中Task_Manager::svc()中task_tp.msg_queue()->deactivate()这句话是什么意思,我看书是先使消息队列无效这可以理解,唤醒入出队操作上的等待线程是什么意思。
    task_tp.wait()是等待其派生的线程都退出吗?但是如果客户端退出,Request_Handler::handle_input中recv返回后return -1,task_tp派生的线程的如何正当的处理其使其安全退出呢。
我是ACE初学,只讨论这个程序的思想和程序流程(我想知道,嘻嘻)BUG不论。再次谢谢winson分享。
 楼主| 发表于 2007-12-31 22:32:45 | 显示全部楼层
追加一个问题,如果将Request_Handler改为ACE_NULL_SYNCH,程序表现上会有哪些不一样的地方。

不说对putq或是getq的一些处理细节的改变。还有其它方面的吗?
 楼主| 发表于 2007-12-31 22:32:59 | 显示全部楼层
1、这种服务端的处理模式也是常用的服务端的处理模式。这是Reactor的,Proactor更适合服务器使用,性能好得多。
2、不知道怎么回答好,我觉得放在哪里无所谓,没觉得作者有特别用意。
3、非常常用的做法,是ACE推荐的。因为这样避免了数据处理过程,对网络处理过程的干扰和阻塞。他们之间使用队列进行了缓冲,能有效的提升网络操作的性能。
4、直接调用发送程序发,出错后缓存,判定错误类型,再尝试。
5、deactivate()是使得消息队列停止活动,处于停止状态。其它等待它的线程,就会收到这个通知,返回了。
6、task_tp.wait()是管理器,它等待所控制的线程退出。Request_Handler::handle_input出错后,默认会调用handle_close()删除。至于task_tp如果同步,没仔细研究过。内部实现了。
7、如果将Request_Handler改为ACE_NULL_SYNCH,会导致多线程同时操作的时候,发生混乱。这个是同步标志,在多线程同时存取一个资源的时候,一定要注意这个问题。

妈呀,累死我了。你自己仔细看看书,C++网络编程卷1、卷2,和ACE程序员指南,这些问题都不难,就是描述起来比较费劲。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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