游戏服务器框架

来源:互联网 发布:安全套 知乎 编辑:程序博客网 时间:2024/05/17 04:13
游戏服务器框架
平台: linux, windows
语言: c++
协议: tcp

1,网络
支持的网络模式: (windows: select, iocp), (linux: select, epoll)

当前主流的开源网络库:
    boost asio
    asio without boost
    libevent
    ace

网络模块设计:
    1,connector, acceptor模式,把客户端和服务端对等看待。
    2,socket buffer, 读缓冲解决tcp粘包问题,写缓冲保证网络线程不阻塞。
    3,io_service, 单个网络线程处理网络收发。
    4,多进程单线程的方式来确保无锁。
    
2, 脚本

lua, 利用lua_tinker来封装。


3,entity/component


4,模式: 收到网络消息后,如何分发----利用观察者模式 来松耦合。

开发一个独立的类来实现观察者模式(一个被观察者队列),被观察者通知消息,观察者注册和处理。观察者和被观察者之间不直接调用。(直接调用了还叫松耦合么。。。)

可以参考cocos2d-x的通知机制。


5,协程,不知道何种情况下会用到。可利用lua来做。自己实现:http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html


6,服务器架构:

client---gateway server---scene server

                                          ---db server

                                          --world server


6.1, 数据库服务器(storage server):

先用mysql。利用官方提供的c/c++接口来访问。先开发一个稳定的服务端。后期可以利用缓存来提高性能。如memcache+mysql. 或者直接用

持久化key-value数据库redis.

忠告:做任何工具之前,先看看是否已有现成的工具。如我自己要去开发memcache+mysql, 而MySQL5.6.2版本增加了通过Memcached协议直接访问原生Innodb API的功能

,不要做无用功。磨刀不误砍柴工。


程序架构:

逻辑无关的底层库, 静态库方式(也可以用head only lib方式)

预处理宏,只有头文件,没有cpp文件的情况下,在main中#define才有效果。不然要在项目属性的预处理命令中添加宏。-->head only lib

libs---libbase

--------libnet


逻辑相关的框架, 源码方式,在具体的服务器中包含

framework---entity, task, 寻路


具体的服务器,包含框架代码,只处理本服务器相关逻辑。

servers---gateway server

-------------scene server

-------------db server