大家觉得这样的服务器架构是不是有些简单了?

7 views
Skip to first unread message

benliang zhu

unread,
Jun 12, 2009, 4:33:32 AM6/12/09
to dev4s...@googlegroups.com
大家好,请教:
    目前我做一个服务器大体结构是这样的,一个接收线程专门收发数据包,一个解析线程,对于收到的包进行解析,逻辑处理,还有一个发送线程发送用的,请问这样的服务器是不是太简单了些?应该如何改进,请大家多说意见和观点,多谢了。
Message has been deleted

benliang zhu

unread,
Jun 12, 2009, 5:47:32 AM6/12/09
to dev4s...@googlegroups.com
如果要求及时性的话,是不是要去掉发送队列,直接调用socket send函数吗?
说实话目前是我用这个结构做网游的客户端的网络逻辑部分,目前不知道这个结构是否够用?

2009/6/12 songlin luo <songl...@gmail.com>
如果不要求及时性,对每个包的解析处理不消耗cpu以及内存。这个逻辑就不错了。



Message has been deleted
Message has been deleted

benliang zhu

unread,
Jun 12, 2009, 5:57:15 AM6/12/09
to dev4s...@googlegroups.com
多开几个处理线程,意味著要在队列上加锁,这样是不是效率会降低?

2009/6/12 songlin luo <songl...@gmail.com>
如果及时性要求比较高,并且每次处理消耗时间长,那么多开几个处理线程。
发送队列是需要的。
 



shiwei xu

unread,
Jun 12, 2009, 6:01:47 AM6/12/09
to dev4s...@googlegroups.com
只有一个处理进程就可以不加锁吗?我的做法,一个线程做收+发,多个处理线程。

2009/6/12 benliang zhu <zhubenl...@gmail.com>

Kasicass

unread,
Jun 12, 2009, 6:06:40 AM6/12/09
to dev4s...@googlegroups.com
前段时间自己写的总结,仅供参考。:-)
http://kasicass.blog.163.com/blog/static/3956192009570434695/

个人觉得你的结构挺好的,只要能满足你的需求就好。“回合制”MMO,单进程多线程的结构也就
比较足够了,只要保证处理玩法逻辑的线程不要 block 在任何系统 api 上就好。

benliang zhu 写道:
> 大家好,请教:
> 目前我做一个服务器大体结构是这样的,一个接收线程专门收发数据包,一个
> 解析线程,对于收到的包进行解析,逻辑处理,还有一个发送线程发送用的,请问
> 这样的服务器是不是太简单了些?应该如何改进,请大家多说意见和观点,多谢了。
>
> >


--
Best regards!

Kasicass/汤泽江 <kasicass_at_gmail_dot_com>

Message has been deleted

Zoom.Quiet

unread,
Jun 12, 2009, 6:19:31 AM6/12/09
to dev4s...@googlegroups.com
2009/6/12 benliang zhu <zhubenl...@gmail.com>:

> 大家好,请教:
>
> 目前我做一个服务器大体结构是这样的,一个接收线程专门收发数据包,一个解析线程,对于收到的包进行解析,逻辑处理,还有一个发送线程发送用的,请问这样的服务器是不是太简单了些?应该如何改进,请大家多说意见和观点,多谢了。
>

Simple is better ;-)

--
http://zoomquiet.org
'''过程改进乃是催生可促生靠谱的人的组织!'''
PE keeps evolving organizations which promoting people be good!

agile java

unread,
Jun 12, 2009, 11:47:23 AM6/12/09
to dev4s...@googlegroups.com
一直潜水中,刚开始做游戏开发,我们现在开发的结构和楼主描述的类似。已经有一个成功的在游戏案例了,运行状况也很好。

我想的一种扩展结构可以将逻辑处理按照业务分离,比如有单独的线程处理玩家移动,战斗等其他业务也可以分单独线程来做,这样在4核以上的服务器性应该好一些,大家觉得呢? 

 

2009/6/12 Zoom.Quiet <zoom....@gmail.com>



--
d0ngd0ng

benliang zhu

unread,
Jun 12, 2009, 10:35:23 PM6/12/09
to dev4s...@googlegroups.com
业务逻辑可以放到不同的服务器上,放到单独的线程里没试过,应该可以吧

2009/6/12 agile java <agile...@gmail.com>

benegg

unread,
Jun 13, 2009, 1:44:18 AM6/13/09
to 高性能网络编程邮件列表
按照业务进行分享是非常好的. 如果两个业务关联不大, 比如一个业务是获取房间列表, 一个业务是转发游戏指令, 那么可以分为两个线程或者进程处理
就. 关键是有些业务之间联系太大, 需要共享很多数据, 无法分离.

On Jun 12, 11:47 pm, agile java <agile.j...@gmail.com> wrote:
> 一直潜水中,刚开始做游戏开发,我们现在开发的结构和楼主描述的类似。已经有一个成功的在游戏案例了,运行状况也很好。
>
> 我想的一种扩展结构可以将逻辑处理按照业务分离,比如有单独的线程处理玩家移动,战斗等其他业务也可以分单独线程来做,这样在4核以上的服务器性应该好一些,大家觉得呢?
>

> 2009/6/12 Zoom.Quiet <zoom.qu...@gmail.com>
>
>
>
> > 2009/6/12 benliang zhu <zhubenliang2...@gmail.com>:

agile java

unread,
Jun 13, 2009, 11:10:37 AM6/13/09
to dev4s...@googlegroups.com
是的,按照业务分别处理是比较理想的状态,可以很好的提高系统资源的利用率,难以处理的就是一些需要共享的数据,我想在我目前进行的游戏中尝试一下这种策略,呵呵。

2009/6/13 benegg <ide...@163.com>



--
d0ngd0ng

张晓衡

unread,
Jul 1, 2009, 10:31:52 AM7/1/09
to dev4s...@googlegroups.com
我觉得如果客户端数量比较多、数据交互频繁的话处理网络的线程(发送和接收线程)应该多开几个,接收线程同时要处理包的解析(这里只是对数据粘包的处理),将收到的完整数据包放入一个队列中,
这时要一个逻辑处理线程从队列中取出数据包进行业务处理。

 
2009/6/12 benliang zhu <zhubenl...@gmail.com>
Reply all
Reply to author
Forward
0 new messages