自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陈嘉怡的专栏

专注服务器。本人有对本博客的所有原创文章的版权。

  • 博客(23)
  • 收藏
  • 关注

原创 游戏服务器之数据包头

游戏一般是自定义协议,包头的设计要从可用性和防外挂考虑。  数据包头struct msg_head{uint32 reserve;//保留字节(可用来标识是否压缩(0x40000000))uint32 len;//包体的长度(是从数据包头之后开始的)uint16 base_flag;//包头标识0xab87(这个可以自己写个适用的,用于查找包头的,数据包是可以写入到文件的,

2014-02-28 20:24:47 1458

原创 游戏服务器之网关

多进程的游戏服务器的应用场景下:网关的功能是处理转发消息,创建、删除、查询角色等。网关会主动连接所有的场景服务器和中心服务器、数据服务器、社会服务器。本文内容:1、网关的初始化2、网关的处理登录服务器的消息3、处理其他服务器转发来的共享消息(场景等服务器发来的)4、处理中心服务器发来的消息1、网关的初始化(1)网关的连接池(主动、

2014-02-27 19:28:42 6039

原创 游戏服务器之线程池管理器

连接线程管理器template class connection_thread_manager : public base_manager,index_null,true>{...//线程池管理器的初始化根据配置来启动线程数bool init(const int min=1,const int max=1,const std::string name="thread",

2014-02-26 16:19:06 1115

原创 游戏服务器之技能

1、技能配置struct SkillDataBase{uint32 id;       //技能idchar   job[MAX_JOB_LEN];        //职业限制char name[MAX_NAME_LEN];//技能名称uint32  target;//1组队   2友方 3 敌方    4 城墙    5 自己uint32 cd;/

2014-02-20 20:16:20 3301

原创 游戏服务器之优化a星寻路

游戏服务器之a星寻路 主要用于npc找玩家。这个是个a*算法的优化算法。

2014-02-20 15:46:58 6273 1

原创 游戏服务器之副本

副本是游戏的重要部分,主要是玩家刷怪刷奖励的地方。1、地图配置(1)地图配置的读取地图配置加载是加载到地图管理器。地图的配置格式是xml,内容大致如下:                                        ...包含地图id 、大小、需求等级、需求金钱、地图名称等。2、副本配置副本配置含有

2014-02-18 20:09:05 2483

原创 游戏服务器之数据服务器存档(多进程版)

bool db_session::msgParse(const MSG::base_msg *ptrMsg, const unsigned int msglen){...   stWriteplayerRoleDataRecordCmd *rev = (stWriteplayerRoleDataRecordCmd*)ptrMsg; db_player *pplayer = g_pl

2014-02-17 21:30:06 1383

原创 游戏服务器之中心服务器

中心服务器是控制消息流程和服务器启动使用的。功能:1、控制服务器启动验证。2、转发其他服务器的消息到其他服务器。3、控制重登陆。本文内容:1、中心服务器初始化2、其他类型服务器的启动验证3、转发服务器消息1、中心服务器初始化bool center_server::init(){mysqlPool = new mysql_handl

2014-02-17 20:05:41 3943

原创 游戏服务器之第三方库tolua++的使用

tolua++ 是使用lua与c++交互的第三方库。可以跨windows和linux平台的。使用步骤:1、把tolua++.exe(在tolua++-1.0.93.rar中) 添加到环境变量path中(或者把tolua++.exe、lua5.1.dll放到当前目录)2、复制头文件到文件夹pack(若新加头文件,否则就直接修改对应pkg文件)3、把头文件拓展名改为pkg4

2014-02-15 11:51:41 1565

原创 游戏服务器之场景和网关之间的消息同步

场景和网关之间同步消息,再发到玩家。1、场景服务器发送消息到网关服务器2、场景服务器发送消息到网关服务器,网关服务器查找对应网关玩家,并发送消息。(1)单个玩家的消息发送(2)多玩家的广播发送 3、网关调试的调用堆栈信息(以广播移动信息到9屏为例)1、场景服务器发送消息到网关服务器bool scene_player::sendmsgToMe(const vo

2014-02-14 12:47:26 2935

原创 游戏服务器之运营日志

运营日志是为了运营人员查看游戏运行情况而增加的。把场景服务器的日志信息发送到运营服务器,再写到mysql数据库(方便运营后台查询,一般是php后台)。设计思想:1、逻辑线程派送运营日志到运营日志线程的添加队列。2、每种类型的日志会对应有发送队列和添加队列,运营日志线程需要发送时就从发送队列中获取日志。3、交换添加队列和发送队列(需要加锁),从发送队列里获取的所有日志(每次最

2014-02-13 17:17:25 2725

原创 游戏服务器之主动连接线程池

本文内容是游戏服务器之主动连接线程池,功能是实现处理服务器之间主动发起的连接的网络的数据收发。一般来说,在场景服务器里连接其他服务器进程的连接是启动了新的线程的(如 场景服务器的主动连接:db服务器、社会服务器、日志服务器)。但是也有不启动线程的客户端连接的做法。对于这类方式,他们的网络收发是统一由主动连接线程池来处理。目前使用案例:例如游戏服务器的网关服务器的主动连接:社会服务器

2014-02-12 17:23:34 1158

原创 游戏服务器之多线程发送

本文讨论的游戏架构设计中,分为两进程(逻辑服务器进程和数据服务器进程),其中逻辑服务器进程包含多个逻辑网关,单个逻辑网关中含4类线程,发送线程是其中一种并在一个逻辑网关中存在多个,用来处理发送业务。

2014-02-11 19:09:27 1604

原创 c++异常抛出

为什么要加一个throw()到你的函数中? 这是异常规范,只会出现在声明函数中,表示这个函数可能抛出任何类型的异常 void GetTag() throw(int);表示只抛出int类型异常 void GetTag() throw(int,char);表示抛出in,char类型异常 void GetTag() throw();表示不会抛出任何类型异常 void GetTag()

2014-02-10 12:25:23 1200

原创 游戏服务器之服务器之间的主动连接

自定义客户端连接socket1、自定义客户端连接socket启动2、创建主动连接socket线程(1)性能检测和周期控制(2)自定义客户端连接socket例程(3)创建连接socket并连接(4)连接socket收发数据3、自定义客户端连接socket关闭1、自定义socket启动创建连接socket线程B

2014-02-10 01:24:58 1648

原创 游戏服务器之服务器之间的被动连接

服务器之间的被动连接的设计和实现,本文的是以自定义被动连接socket来体现。功能是服务器之间的数据收发的被动连接的处理。应用如:数据服务器的数据服务器对象是继承于自定义被动连接socket的,处理逻辑服务器的连接活动。设计上:启动两个线程:(1)接收连接线程增加活动会话(2)启动数据收发线程处理所有的会话上的数据,接收数据并拷贝到缓存,和处理发送队列数据发

2014-02-10 00:50:15 1138

原创 游戏服务器之角色移动

角色移动主要是要处理前后端的移动同步和阻挡检测。(1)前端发送移动请求(2)检查该角色是否可以移动到该位置,并记录移动请求(3)角色移动的调用层次:逻辑主循环-->场景管理器遍历->场景循环-->角色遍历-->角色循环-->角色移动bool scene_player::loop(){//每隔500毫秒计算角色的移动if(_

2014-02-08 21:29:57 3234

原创 游戏服务器之角色数据管理工具(python版)

之所以要做个工具,是方便非程序人员也可以容易操作和管理数据库,进而可以管理游戏程序。使用python作为工具是python容易写图形工具,而原来的项目也用到python作为逻辑脚本。python 的一个第三方库wx可以提供一些图形支持,支持事件循环和响应。if __name__ == "__main__":    import sys    reload(sys)    s

2014-02-07 20:18:30 2162

原创 游戏服务器之角色背包

背包设计有不同的做法。这里说的是物品格子的问题,这也是主要的问题。有些游戏的物品一个物品就占掉几个格子,其他的游戏使用简单的做法就是一个物品占一个格子。占几个格子的物品的设计一般是配置了物品的长和宽。这就有个问题:怎样后端判断物品之间不会重叠。效率较高的是使用图的思想,使用变量的位。如一个物品如果是2*2的,那它就要占去4个位。怎么记录呢?如果是小于64个格子的背包(一

2014-02-07 12:38:50 4193

原创 hiredis的api

hiredis是redis数据库的C接口,目前只能在linux下使用,几个基本的函数就可以操作redis数据库了。 函数原型:redisContext *redisConnect(const char *ip, int port) 说明:该函数用来连接redis数据库,参数为数据库的ip地址和端口,一般redis数据库的端口为6379该函数返回一个结构体redisContext。

2014-02-03 22:14:00 1506

原创 游戏服务器之数据包分配(数据包池法)

(1)申请一个发送数据包/* 申请一份发送数据包 * 当发送数据包填充内容后应当调用FlushSendPacket提交发送数据 * ★调用者申请一个发送数据包对象后必须在队列缓冲池被销毁前提交数据包; */inline CDataPacket& allocSendPacket(){CDataPacket *pPacket;allocSendPacketList(*(

2014-02-02 13:11:21 1304 1

原创 lua的c api 总结

extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"} #include #include using namespace std;    int main(){    //Lua示例代码    char *szLua_code =        "r = st

2014-02-01 12:02:11 1594

原创 游戏服务器之多进程架构通信

游戏服务器有时需要分多个进程来处理各种负载。进程类型有如下登陆服务器:创建账号,检验角色账号,选择和获取并返回网关信息。网关服务器:创建角色,转发消息。会有网关角色,和相关的屏信息,用于广播。场景服务器:处理场景(分线或不分线的)、副本的游戏逻辑。社会关系服务器:处理社交相关的全区的逻辑。数据库服务:存取数据。中心服务器:处理内部服务器之间的消息

2014-02-01 00:07:41 4162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除