游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1486|回复: 0

网络游戏通用架构 2006.10.16 版

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2006-10-17 20:48:00 | 显示全部楼层 |阅读模式

这是我用C++,基于boost和libevent写的一个小程序,用于Client/Server架构的网络通信,当然服务器端可以支持多个客户端。

我在这个软件里做了这么几个尝试:
1.把具体的功能(业务逻辑)放进动态链接库里,且可以分布在多个动态链接库文件里,这样可以比较灵活。
2.把具体的功能从基础的类中分离出来,也就是说A对象和B对象要交互,就通过第三个C消息对象进行,也就是设计模式中的Command模式,这样无论本地交互还是网络交互都是一样的形式(通过传递对象来交互),而且可以在运行时从动态链接库中载入消息对象以扩展功能。比如游戏中的各种技能魔法可以以单独的类的形式实现并放入动态链接库中,通过动态载入这些动态链接库就可以在服务期不停机的情况下添加新的技能;甚至可以考虑让玩家来组合形成自己的技能对象,这样技能系统可以变得更加灵活。


下面是它的总体架构,行首标注“OK”的表示已经完成或已经基本完成,标注“★”的是正在加入的功能。
=======================================================================================================
    World
OK.     Config
OK.         Property                       //配置信息
        Logic
            Physics                        //特化了的Logic子系统
OK.         Message                        //可通过网络(或在本地)传递的对象,用以实现各Object之间的各种交互
☆          Object                         //Scene之中的各种对象,通过传递Message互相交互
OK.     Scene
            Scene                          //场景树,用以实现时空系统,通过与远程Scene传递Message来进行同步
OK.     Network
            select/poll/epoll/iocp         //网络消息调度
            TCP/SCTP                       //使用各种协议建立连接、传递数据
OK.     MessageRouter                  //负责路由本地消息对象
        Database
            File
            DBMS
        UI                             //人机交互界面(这里不仅指GUI,也包括一切输入输出的途径)
            Output
★              GUI                        //图形用户界面
                Graph                      //以渲染图形的形式进行输出
                Audio                      //音效和音乐的输出
            Input                      //处理各个输入设备所产生的输入序列及其排列组合
★              Keyboard                   //键盘输入
                Mouse                      //鼠标输入
                Mic                        //话筒输入
OK.     Factory
OK.             Factory
OK.             DynamicFactory
-------------------------------------------------------------------------------------------------------
OK.     Timer                          //定时器,用以实现定时和时间流速控制
        Serialization                  //负责对象的序列化和重建
=======================================================================================================

依赖的开发库:
http://www.boost.org
    Boost.Program_options
    Boost.Smart Pointers
    Boost.Date_Time
http://www.monkey.org/~provos/libevent/
    Libevent


到目前为止我一直是在Windows XP下的Microsoft Visual Studio .NET 2003中使用C++开发的,不过我想应该是可以在Linux下编译运行,跨平台也是我所努力追求的。附上的.rar文件中,有它的源代码及Visual Studio项目文件,以及一个单独的TestScene项目。这个TestScene会编译出一个动态链接库供主程序调用,它使用了wxWidgets 来制作GUI,功能是让服务器将每个客户端发来的文本消息广播给所有的客户端,要运行的话可以先打开控制台,切换到VSprj\mmo\Debug目录中,运行命令:
    服务器端:
        mmod -c ServerScene
    客户端:
        mmod -c ClientScene
本来应该要指明调用哪个动态链接库文件的,不过我在mmod.exe所在的目录里附上了一个配置文件config.cfg,里面用相对路径指出了要载入的动态链接库,要载入其他的库可以修改这个配置文件或者通过命令行参数来指定。
另外本来主程序的名字是mmo,但是在Debug版本里叫做mmod以作区分。


由于对GPL和LGPL还不太了解,而这个程序又会涉及到动态链接库,所以暂时不给出Licence,不过可以肯定的一点是这个项目是开源的。也欢迎大家给我提出意见和建议。

下载链接:
http://ishare.sina.com.cn/cgi-bin/fileid.cgi?fileid=1010000

截图可以去我的blog看

[em10]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 15:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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