大宝(sodme)的专栏

专注于高性能网络服务器技术研发,关注网游产品设计、研发、市场与运营的各个环节

用户操作
[即时聊天] [发私信] [加为好友]
大宝(sodme)ID:sodme
392577次访问,排名142,好友313人,关注者348人。

倡导并实践着:
开发者应具备团队观和大产品观,崇尚实效至上的开发观,不唯技术论,不唯权威论,不畏惧任何困难,不丢下任一战友。

愿广泛结交同秉此理念的志同道合者,可以通过CSDN个人空间加我为好友,或者选择“关注”我。

我的网易博客:
http://sodme.dev.blog.163.com
GT&mail: sodme.dev#gmail.com
如要联系,请一律邮件。
sodme的文章
原创 132 篇
翻译 0 篇
转载 22 篇
评论 198 篇
大宝(sodme)的公告
我们的理念:
以市场作产品,以产品作技术。

1. 积极面对自己的工作和生活,是一种有百利而无一害的态度;

2. 不唯技术论,可以让你站在更高的层面去思考更多全局性的东西,而这些东西更直接地影响着产品成败和你个人的发展;

3. 我们希望的是,做一款成功的产品,而不仅仅是做一项成功的技术,如果技术与产品可以合起来当然更好,如果不能,那明智的选择当然是产品;

4. 知识型工作者,要学会自我管理,没有了自我管理,知识型工人可能连一个搬砖工人的价值都顶不上。

最近评论
zatman:谢谢,受益匪浅哈~~~
supperwfy:google的网络框架服务是其精髓。
fjfqslg:看了你的文章受益匪浅,谢谢你,^_^
kissnsms:众所周知,CreateIoCompletionPort函数,有两个作用,一是“创建”一个完成端口,二是将一个socket与已经创建的完成端口句柄相“绑定”,绑定之后,基于该socket的收、发、断开等事件都可以被完成端口感知。

请教一下,如何感知断开?在不进行数据的收发的情况下,谢谢!
rjchen:同意"持续更新, 持续开发, 持续改善能力"的观点,我们现在也在朝这个方向努力,由一个月发布一个新版本,到争取半个月发布一个新版本,到一周发布一个新版本,通过来提高用户的响应速度和体验。
文章分类
收藏
相册
_我的其它站
My GooglePages
My Maillist
My MsnSpace
我的网易博客
非技术
TechWeb
东方宽频
中国企业史
叶蓉
吴晓波
圈子-圈套
士兵突击
多玩网
李书文
王冉
蓝狮子
赢在中国
郎咸平
马未都
存档
订阅我的博客
XML聚合  FeedSky

原创 一次关于游戏服务器底层通信架构的重构过程收藏

新一篇: 关于IOCP的更进一步理解 | 旧一篇: 一个严蔚敏老师网站的备份网站

从昨晚七点,到今天上午11点,先后对大厅和房间服务器进行了重构,重构后的代码结构清晰了,效率也提高了,觉得这次的重构过程很有意义,所以记录下来以备查。

在原有的大厅服务器中,原有的设计是使用统一的一个TUSER对象管理底层数据的接收以及高层对TUSER进行的逻辑层的属性读写操作,不管是玩家正常连接的SOCKET还是用于临时通信的SOCKET,只要有连接都会分配一个TUSER对象。而在TUSER对象中,又都包含大致这两方面的信息:一方面的信息是用于底层数据通信的,比如接收缓冲区数组,接收缓冲区大小等属性;而另一方面的信息则是逻辑层的玩家对象定义,包括:玩家账号、性别、年龄等属性。在原有的设计中,没有将这两个方面的信息进行进一步的划分,而是统一放在了一个TUSER里面。这样作,就存在一个问题,对于一些非正常玩家的连接,比如玩家注册或者是其它服务器与该服务器通信用的SOCKET,只要有连接,就要建立TUSER对象(因为TUSER里面有接收数据缓冲区,而所有的数据通信必须要用各自的缓冲区来作),这样TUSER对象的一些玩家属性就没有利用起来,从而导致浪费了大量的内存空间。

新的结构中,将TUSER对象一分为二,将其中有关底层通信的数据和方法分离出来,形成一个新的对象:TCONN,TCONN专门用来处理各玩家的底层通信数据和维护各玩家自己的接收缓冲区,在SOCKET的RECV里,将根据TCONN以及接收到的新数据形成一个个的逻辑数据包提交给更高层的逻辑来处理,而在其后的高层逻辑中就包含对TUSER对象的维护。这样一来,当TCONN分离出来的数据包,是要求对TUSER对象进行维护时,就在高一层的逻辑里维护TUSER,而当TCONN分离出来的数据包是要求对TABLE或其它对象进行维护时,就不用再搭载上TUSER对象。也就是说,TUSER对象的生与死,是完全按照高层逻辑在走,而不是按照网络连接和断开来走,这样分出来的两个对象应该是较好地区分了网络底层与游戏逻辑两个方面,使其彼此可以基本脱离,具有更好的扩展性和无关性。

进行了此项重构后,无意中解决了这样一个BUG:用户从桌子退出时有时无法在房间里更改状态的问题。

发表于 @ 2004年08月26日 13:18:00|收藏

新一篇: 关于IOCP的更进一步理解 | 旧一篇: 一个严蔚敏老师网站的备份网站

评论:没有评论。

Csdn Blog version 3.1a
Copyright © 大宝(sodme)