
记录
文章平均质量分 72
ckyrt
这个作者很懒,什么都没留下…
展开
-
跨服思路
月底到了,总结下跨服思路gameserver在Announcement : Threadupdate 里面检测 是否 gameserver与 centerserver连接上了5线程 每线程 5 地图centervice 与 centerserver连接上 一个conncenterserver定时匹配,匹配好后,找validConn作为战场服原创 2017-09-30 11:54:10 · 882 阅读 · 0 评论 -
无缝副本思路
2017/09/25无缝副本思路,一般情况下,我们切换地图,从服务器端数据上来讲,changemap,所在地图发生改变,周围的entity就发生了改变,从客户端表现上来讲,map的改变,地图资源发生变化,周围的怪物,玩家发生了变化,切换地图是放到了某一个默认地点,玩家感觉自己是实现了切换,进到了不同场景无缝,核心在于玩家看起来感觉不到地图的切换,因此我需要让切换后的地图和当前地原创 2017-09-30 11:55:52 · 285 阅读 · 0 评论 -
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 · 242 阅读 · 0 评论 -
项目引入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 · 785 阅读 · 0 评论 -
多态与O2
数字在内存中都是以补码的方式存储的为何这样,因为这样 正负数可以方便计算。符号位和数据位int_32 4个字节,第一位是0/1表示正/负,后面的2^31都是数据位,因此最大的正数是正数的补码还是自己负数的补码等于 符号位不变,数据位逐位取反然后加一,相加就是补码相加 然后回到原码相减就是加负数,变为补码 相加,然后回到原码。编译时多态和运行时多态原创 2017-09-30 12:13:21 · 271 阅读 · 0 评论 -
kbengien(1)
以后kbengine系列 记录自己的kbengine学习过程machine.exe 守护进程 服务器的关闭与启动一个硬件服务器就这一个进程logger.exe 第三方 计费 账号 运营 管理等interfaces.exe 日志loginapp.exe baseapp.exe-----baseappmgr.exe 游戏内容 逻辑 社交排行聊天基本游戏内原创 2017-09-30 12:28:11 · 395 阅读 · 0 评论 -
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 · 244 阅读 · 0 评论 -
再谈消息包和几张图
1048576 内部server之间 send recvbuffer大小32767 gateserver对AS客户端之间 send recvbuffer大小要发消息,触发发送事件,那么把现在sendlist的消息发送完,如果长度大于sendbuffer长度,那么就发送最大的sendbuffer问:一个消息不是断了吗?答:记录位置,记录消息体写到哪了 下次发送的时候继续从记录位置往原创 2017-09-30 16:15:05 · 366 阅读 · 0 评论 -
关于测试机器人的记录
关于测试机器人这个月零零碎碎都不知道干了些什么 对接的多主要做了机器人 测试服务器的 要感谢同事之前的工作 我也是在基础上进行的mmo 主要瓶颈在于网络处理机器人模拟玩家进行游戏,主要流程当然是登录选择角色,进入游戏,移动,打怪,获取装备,穿上装备,跑npc,接任务,完成任务。我们主要的目的是让机器人模拟玩家 跑完主线任务即可游戏内容模拟玩家方面,完原创 2017-11-01 09:37:12 · 3427 阅读 · 0 评论 -
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 · 2529 阅读 · 0 评论 -
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 · 286 阅读 · 0 评论 -
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 · 271 阅读 · 0 评论 -
断线重连总结
断线重连总结gateserver负责所有与客户端的直接连接m_conns[10000]也就是一个gateserver最多可以维持10000条socket连接,蓝月采用的是tcp行走各种消息都是tcp,不存在丢包一说,只会延迟每个客户端点击登录时会做以下事情建立socket tcp连接,向gateserver 的ip port发送请求,gateserver收到原创 2017-07-11 13:26:29 · 8920 阅读 · 3 评论 -
消息池
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 · 830 阅读 · 0 评论 -
菱形继承
/**菱形继承 与 虚拟继承*/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 · 336 阅读 · 1 评论 -
proxy模式 智能指针
参考 http://www.jellythink.com/archives/301proxy模式:软件工程中,任何功能的实现其实都可以通过 增加中间层来实现。 proxy的作用就是基于此。访问对象的时候增加了一定程度的间接智能指针:内存管理,何时释放,引用计数为0,自动释放。相当于给之前的单纯的m_pData 增加了一层。通过proxy模式实现了智能指针/*转载 2017-08-24 14:41:50 · 356 阅读 · 0 评论 -
网络游戏粘包处理
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 · 481 阅读 · 0 评论 -
网络游戏中消息包结构
一 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 · 1057 阅读 · 0 评论 -
mmo地图相关MapService
main(){initCfgData();//读配置数据到内存//一堆servervice开始工作,实际每个service只有一个,为了后续的可扩展性,每个manager维护一个service容器来管理,dbService();globalService();centerService();helpService();gameService();....原创 2017-06-09 21:28:30 · 460 阅读 · 0 评论 -
网络游戏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 · 555 阅读 · 0 评论 -
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 · 344 阅读 · 0 评论 -
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 · 507 阅读 · 0 评论 -
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 · 204 阅读 · 0 评论 -
listener模式
/*监听者模式一个listenerCenter,每个listener 对不同的传入参数做不同的事情把这些listener加入Center列表然后Center执行做什么事情,调用响应的listener执行事情。我只需要让center 广播消息,center自会调用事件队列找出对应的对象执行相应的事情*/struct Msg{int listener;int e原创 2017-08-24 15:11:10 · 1063 阅读 · 0 评论 -
拷贝构造函数和TIME_WAIT状态的意义
/************深拷贝 浅拷贝***********/c++默认拷贝构造函数是浅拷贝,因此要实现深拷贝我们需要重新写,防止默认拷贝发生 因为默认拷贝构造函数 会造成赋值等操作 调用默认拷贝,但是只是执行了浅拷贝,所以导致程序结束,调用析构函数释放空间的时候会释放两次。这就出问题了所以要么禁用默认拷贝构造函数要么自己重写拷贝构造函数默认拷贝构原创 2017-08-25 17:32:42 · 227 阅读 · 0 评论 -
线程
#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 · 182 阅读 · 0 评论 -
多线程的互斥锁
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 · 294 阅读 · 0 评论 -
高效读写消息队列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 · 1687 阅读 · 0 评论 -
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 · 765 阅读 · 0 评论 -
引用计数
引用计数,使用浅拷贝,同时也不会错误的释放了内存,引用数为0我再delete掉注意,引用计数部分,应该做到不同对象都能访问到,放到堆内存,一个成员变量,指向堆里面一块空间,这块地方用于管理引用数,浅拷贝的时候,不同对象只需要拷贝成员变量,也就是这些指针变量指向同一个地方,都指向这块 管理引用计数的 地方。class RefCount{public: RefCount() :m_c原创 2017-08-28 17:58:20 · 328 阅读 · 0 评论 -
sendBuffer和sendList
gateserver下发给客户端的消息 只是放到connect的sendlist里面,然后enableMask设置为write等到多路复用检测到他需要发的时候,可能sendlist已经有很多了个packet了然后多路复用检测到 这个联系需要send,然后开始onSend注意下面是核心现在我们onSend里面要做的就是 把sendlist里面这些发出去sendlist.pop()写入buffer,直...原创 2018-03-30 14:19:45 · 2277 阅读 · 0 评论