虚心请教一个设计上的问题
我现在要用ACE做一个数据转发的程序。这个程序既是服务器也是客户端。作为客户端要去连接若干个服务器去要数据(10个左右),又要作为服务器向他的客户端(10个左右)发送从服务器要来的数据,而且是选择性的发送,不是遍历每个客户端发送。选择规则由他从服务器要来的数据再经过解析后决定。如果实现此功能,这个程序的架子怎么搭,用ACE的哪种框架最好。而且还要考虑效率。 楼主的需求定义说明比较笼统,故而在逻辑设计方面不太好做评论。
至于网络实现,由于并发量不是很大,
因此用proactor与Reactor都差不多。
当然由于是异步,proactor的性能会更好些,
但是上手会比Reactor难度大些。
至于如何选择,主要看楼主目前对哪个框架熟悉了。
如果都不熟悉,那么先看书,在项目中需谨慎引入ACE。 回modern:
1 你说的并发量是不大,但是每个连接的数据量挺大的,从服务器要数据每个连接每秒要过来的数据大概在5000,如果有多个连接,汇总在这个中转程序缓存队列中的数据就已经上万了,还要从这个队列中取出数据,然后再分析发向哪个下级,这个效率又如何保证啊。假设分析的时间很短,但是这种汇总再转发的机制效率也高不了啊。
2 你说的在项目中谨慎引入ACE。现在就是在做项目,从来没接触过ACE,但是项目要求用ACE。我现在是赶鸭子上架啊。。 个人认为,如果你的服务器就做这么一件事情的话,
差别应该不大,因为很多时候所谓性能差都是差在设计上了,
我认为即便在windows下Reactor使用的好的话处理能力也可以满足日常需求,
当然这需要跟你的需求定义,通过测试数据说话。
谈性能的话,windows下proactor是首选,linux下Dev_Poll_Reactor是首选。
不过问题在于proactor上手不是很容易,使用得当的话,这可能得多花费你一段时间,
如果楼主对于网络编程不是很有经验,而且赶时间的话,
建议使用Reactor的,毕竟上手容易一些,调试也比较容易。
最后,性能的事情,最好让系统分析师架构师去考虑,
如果你不是这样的角色,那么首先考虑降低实现功能的复杂性吧。 好的,谢谢modern,接受你的意见。我对网络编程实在是不熟,以前是做播放器的。。。。没办法,往死里看书吧。
页:
[1]