自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 sendBuffer和sendList

gateserver下发给客户端的消息 只是放到connect的sendlist里面,然后enableMask设置为write等到多路复用检测到他需要发的时候,可能sendlist已经有很多了个packet了然后多路复用检测到 这个联系需要send,然后开始onSend注意下面是核心现在我们onSend里面要做的就是 把sendlist里面这些发出去sendlist.pop()写入buffer,直...

2018-03-30 14:19:45 2129

原创 快速排序

void quickSort(int a[], int i, int j){ if (i >= j) return; int left = i; int right = j; //基准值 int stand = a[i]; while (i < j) { while (stand <= a[j] && i < j) { j--; } //j位 比 st

2018-02-07 12:18:33 239

原创 string实现

//实现string类class SwyString{public: SwyString(const char* str = NULL) { //构造函数 if (!str) { length = 0; data = new char[1]; *data = '\0'; } else { length = strlen(str); d

2018-01-31 17:57:04 235

原创 list实现

//为了不与stl冲突,使用命名空间namespace Swy{ //类型用模板,因此实现都在头文件中 //swy实现链表 template class list_item { public: list_item(elemType value, list_item* link = 0) :_value(value) { //把value插入到link的后面

2018-01-31 15:42:45 262

原创 cocoscreator游戏开发(一) tilemap

//下面是完整代码var DIR = cc.Enum({ UP:0, RIGHT:1, DOWN:2, LEFT:3,});cc.Class({ extends: cc.Component, properties: { direction:DIR.UP, speed:32, /* __

2018-01-22 23:05:07 2401

原创 关于测试机器人的记录

关于测试机器人这个月零零碎碎都不知道干了些什么 对接的多主要做了机器人 测试服务器的 要感谢同事之前的工作 我也是在基础上进行的mmo 主要瓶颈在于网络处理机器人模拟玩家进行游戏,主要流程当然是登录选择角色,进入游戏,移动,打怪,获取装备,穿上装备,跑npc,接任务,完成任务。我们主要的目的是让机器人模拟玩家 跑完主线任务即可游戏内容模拟玩家方面,完

2017-11-01 09:37:12 3341

原创 再谈消息包和几张图

1048576 内部server之间 send recvbuffer大小32767  gateserver对AS客户端之间 send recvbuffer大小要发消息,触发发送事件,那么把现在sendlist的消息发送完,如果长度大于sendbuffer长度,那么就发送最大的sendbuffer问:一个消息不是断了吗?答:记录位置,记录消息体写到哪了 下次发送的时候继续从记录位置往

2017-09-30 16:15:05 327

原创 kbengien(1)

以后kbengine系列 记录自己的kbengine学习过程machine.exe 守护进程 服务器的关闭与启动一个硬件服务器就这一个进程logger.exe 第三方 计费 账号 运营 管理等interfaces.exe 日志loginapp.exe baseapp.exe-----baseappmgr.exe 游戏内容 逻辑 社交排行聊天基本游戏内

2017-09-30 12:28:11 338

原创 lua(1)

--lua调用cpp的静态函数--C++代码int getnumber(int num){return num+1; }int cpp_getnum(lua_state* pl){//从栈顶取一个值int num = (int)lua_tonumber(pl,-1);lua_pushnumber(pl,getnumber(num));retu

2017-09-30 12:24:34 205

原创 多态与O2

数字在内存中都是以补码的方式存储的为何这样,因为这样 正负数可以方便计算。符号位和数据位int_32  4个字节,第一位是0/1表示正/负,后面的2^31都是数据位,因此最大的正数是正数的补码还是自己负数的补码等于 符号位不变,数据位逐位取反然后加一,相加就是补码相加 然后回到原码相减就是加负数,变为补码 相加,然后回到原码。编译时多态和运行时多态

2017-09-30 12:13:21 233

原创 项目引入lua

2017/09/23这周 lua luna 编译成dll 供gameserver使用寻宝使用经验丹部分 lua实现,1 用数据库字段控制 是否重新加载lua代码2 lua main里面存lua里面的所有模块 全局的 供不同的部分 调用3 luaconst里面存 c++里面的常量 或者一些公共指针4 c++调lua通过lua_call_table_function

2017-09-30 12:03:03 730

原创 makefile

TARGET = ../bin/gameserver 目标文件夹OBJPATH = obj 编译后的.o .d文件所在夹(.b相当于windows下obj文件,链接 .d为源文件的依赖关系的完整规则)CFLAGS = -g -std=c++11 -fpermissive -O2 -Wall -I../share -I../libanswer/include-I/usr/incl

2017-09-30 12:02:03 191

原创 无缝副本思路

2017/09/25无缝副本思路,一般情况下,我们切换地图,从服务器端数据上来讲,changemap,所在地图发生改变,周围的entity就发生了改变,从客户端表现上来讲,map的改变,地图资源发生变化,周围的怪物,玩家发生了变化,切换地图是放到了某一个默认地点,玩家感觉自己是实现了切换,进到了不同场景无缝,核心在于玩家看起来感觉不到地图的切换,因此我需要让切换后的地图和当前地

2017-09-30 11:55:52 247

原创 跨服思路

月底到了,总结下跨服思路gameserver在Announcement : Threadupdate 里面检测 是否 gameserver与 centerserver连接上了5线程 每线程 5 地图centervice 与 centerserver连接上 一个conncenterserver定时匹配,匹配好后,找validConn作为战场服

2017-09-30 11:54:10 822

原创 消息池

class Message{public: Message(MessagePool* pool) :m_pool(pool) { } ~Message() { }public: void destroy() { //消息回收 进入池子 if (m_pool != NULL) { m_pool->push(this); } else {

2017-08-30 12:17:57 747

原创 菱形继承

/**菱形继承 与 虚拟继承*/class SWYA{public: SWYA() :a(0) { cout << "construct A\n"; } ~SWYA() { cout << "deconstruct A\n"; }public: virtual void fun() { cout << "fun\n"; }public: int a;};class SW

2017-08-29 10:37:10 284 1

原创 引用计数

引用计数,使用浅拷贝,同时也不会错误的释放了内存,引用数为0我再delete掉注意,引用计数部分,应该做到不同对象都能访问到,放到堆内存,一个成员变量,指向堆里面一块空间,这块地方用于管理引用数,浅拷贝的时候,不同对象只需要拷贝成员变量,也就是这些指针变量指向同一个地方,都指向这块 管理引用计数的 地方。class RefCount{public: RefCount() :m_c

2017-08-28 17:58:20 290

原创 SafeQueue读写示例

#define PROC_MAX 100#define PROC_MIN 0enum ErrorCode{ ERR_OK = 0, ERR_INVALID_DATA,};class Message{public: Message() {} ~Message() {} int proc; int content;}; typedef int32_t(*MessageH

2017-08-28 11:13:12 680

原创 高效读写消息队列SafeQueue

/******************高效消息队列 读写分离 自旋锁********************/class SpinLock{public: SpinLock() { pthread_spin_init(&m_spinlock, 0); } ~SpinLock() { pthread_spin_destroy(&m_spinlock); }private: DISAL

2017-08-28 10:58:02 1618

原创 多线程的互斥锁

class Mutex{public: Mutex() { pthread_mutex_init(&m_mutex, NULL); } ~Mutex() { pthread_mutex_destroy(&m_mutex); }private: DISALLOW_COPY_AND_ASSIGN(Mutex);public: void lock() { pthread_mutex_lo

2017-08-26 16:06:54 252

原创 线程

#include using namespace std;#pragma comment(lib, "pthreadVC2.lib")class SwyThread{public: SwyThread(bool joinable = true) : m_joinable(joinable) { memset(&m_thread, 0, sizeof(m_thread))

2017-08-26 10:58:13 154

原创 拷贝构造函数和TIME_WAIT状态的意义

/************深拷贝 浅拷贝***********/c++默认拷贝构造函数是浅拷贝,因此要实现深拷贝我们需要重新写,防止默认拷贝发生 因为默认拷贝构造函数 会造成赋值等操作 调用默认拷贝,但是只是执行了浅拷贝,所以导致程序结束,调用析构函数释放空间的时候会释放两次。这就出问题了所以要么禁用默认拷贝构造函数要么自己重写拷贝构造函数默认拷贝构

2017-08-25 17:32:42 201

原创 listener模式

/*监听者模式一个listenerCenter,每个listener 对不同的传入参数做不同的事情把这些listener加入Center列表然后Center执行做什么事情,调用响应的listener执行事情。我只需要让center 广播消息,center自会调用事件队列找出对应的对象执行相应的事情*/struct Msg{int listener;int e

2017-08-24 15:11:10 986

原创 bridge模式

/*桥接模式多维变化适合用一维变化继承就行了*/class ImpShape{public:ImpShape(void) {};virtual ~ImpShape(void) {};public:virtual void draw()=0;};class ImpPdf : public ImpShape{publi

2017-08-24 15:07:19 193

原创 command模式

//command 模式class Command{public:virtual ~Command(){}virtual void Execute() = 0;};class Receiver{public:void Action();};void Receiver::Action(){std::cout }class

2017-08-24 15:02:04 177

转载 proxy模式 智能指针

参考 http://www.jellythink.com/archives/301proxy模式:软件工程中,任何功能的实现其实都可以通过 增加中间层来实现。  proxy的作用就是基于此。访问对象的时候增加了一定程度的间接智能指针:内存管理,何时释放,引用计数为0,自动释放。相当于给之前的单纯的m_pData 增加了一层。通过proxy模式实现了智能指针/*

2017-08-24 14:41:50 290

原创 I/O阻塞非阻塞与异步 epoll总结 ET/LT AStar提速

参考https://segmentfault.com/a/1190000003063859http://blog.chinaunix.net/uid-17299695-id-3059078.html个人笔记记录内核空间与用户空间linux操作系统将虚拟空间(32位4G)分为内核空间和用户空间,为了安全,保证用户进程不能直接操作内核内核可以访问受保护的

2017-07-26 20:46:31 470

原创 epoll TcpMultiplexor笔记

TcpMultiplexor简单的epoll练习void TcpMultiplexor::run(){m_epfd = epoll_create(10000);//最大连接数,epoll fd,epoll自身也是一个文件描述符,所以用完之后记得closeif(m_epfd == -1)return;//出问题了epoll_event *event = new e

2017-07-26 19:33:52 316

原创 断线重连总结

断线重连总结gateserver负责所有与客户端的直接连接m_conns[10000]也就是一个gateserver最多可以维持10000条socket连接,蓝月采用的是tcp行走各种消息都是tcp,不存在丢包一说,只会延迟每个客户端点击登录时会做以下事情建立socket tcp连接,向gateserver 的ip port发送请求,gateserver收到

2017-07-11 13:26:29 8783 3

原创 网络游戏NetPacket包与sendBuffer

//m_parseLen 表示当前netPacket解析到哪里了//m_sendLen表示buffer已经发出去的到哪里了//buffer总的长度 m_sendBufferSize 32767,很多包写到buffer里面,发送是以buffer为单位,往出发void TcpConnection:encodeSendBuffer(){//要发送的NetPacket放入Buffer里

2017-06-14 21:34:49 506

原创 mmo地图相关MapService

main(){initCfgData();//读配置数据到内存//一堆servervice开始工作,实际每个service只有一个,为了后续的可扩展性,每个manager维护一个service容器来管理,dbService();globalService();centerService();helpService();gameService();....

2017-06-09 21:28:30 422

原创 网络游戏中消息包结构

一 NetPacket:NetPacket(int buffersize,NetPacketPool* pool,bool scal=true,bool policy=false){//构造函数,if(buffersizebuffersize = 7;//消息包最小7字节 1+2+4 type,proc,sizem_buffer = new Char[204

2017-06-09 20:12:46 1004

原创 网络游戏粘包处理

int TcpClient::onRecv(){int error = ::recv(m_fd, m_recvBuffer+m_recvOffset, m_recvBufferSize-m_recvOffset, 0);//m_recvBuffer = new char[m_recvBufferSize];//2k 接收消息的字符数组,开辟了2K的空间if (error >

2017-06-09 09:09:29 433

原创 mark

以后在这里记录下自己的想法,看到好的技术文章记录下来,在这里整理。mark

2017-05-13 12:23:53 189

空空如也

空空如也

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

TA关注的人

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