随笔分类 - C++
摘要:服务器上线之后,发生了3次crash,感觉是一次比较典型的内存bug的排错经历,所以特地记录下来供以后借鉴。下面描述一下3次crash时候的coredump的当前堆栈信息。 第一次crash的coredump文件: 从堆栈信息可以看出来,是逻辑一个函数在构造string对象的时候,最后在malloc
阅读全文
摘要:在3D MMO或者其他类型的游戏中,通常需要进行寻路处理,地图针对寻路有多种方案,比如划分格子,凸多边形等,本篇介绍一种比较常用的navigation mesh的方式来进行寻路。不过整套navmesh的算法比较复杂,没有深入的研究写不出来,我们使用网上开源的解决方案,google的recast方案。
阅读全文
摘要:最近在做服务器的稳定性的相关测试,服务器的网络底层使用的是boost asio,然后自己做的二次封装以更好的满足需求。 服务器昨天晚上发现crash了一次,之前测试了将近半个多月,有一次是莫名的退出了,不过由于是新的测试服,忘记将ulimit -c进行修改了,所以没有coredump,这次又发生了。
阅读全文
摘要:最近做新的项目,很多库是之前项目积累下来的库。在windows下使用的IDE是vs2013,整体编译的时候,明显感觉编译速度较慢,文件是一个一个编的。 从编译器本身的角度,vs2013是提供了加快编译速度的方法的: 我们可以在C/C++ -> 常规 -> 多处理器编译,选成是,这样就启动了多处理器同
阅读全文
摘要:我们经常使用网页,作为开发人员我们也部署过httpd服务器,比如开源的apache,也开发过httpd后台服务,比如fastcgi程序,不过对于httpd服务器内部的运行机制,却不是非常了解,前几天看见tinyhttpd,只有短短500行左右的代码,就实现了一个简单的httpd服务器的基本功能,这种
阅读全文
摘要:队列是我们非常常用的数据结构,用来提供数据的写入和读取功能,而且通常在不同线程之间作为数据通信的桥梁。不过在将无锁队列的算法之前,需要先了解一下CAS(compare and swap)的原理。由于多个线程同时操作同一个数据,其中肯定是存在竞争的,那么如何能够针对同一个数据进行操作,而且又不用加...
阅读全文
摘要:dbMgr主要是玩家数据的读取和保存的,例如在bigworld源码分析(3)中,玩家在认证的时候,loginApp需要通过dbMgr来验证玩家数据是否合法,这就是针对玩家的账号数据进行查询。本篇中,我们主要针对以下几个问题来分析dbMgr工作原理。 (1) dbMgr如何验证玩家的账号合法性 ...
阅读全文
摘要:BaseApp负载部分,核心代码缺失。。。网上的源码中都找不到,暂时没办法分析其核心内容,很遗憾,继续寻找吧,等找到了,再继续自己的分析。
阅读全文
摘要:BaseAppMgr是用来管理BaseApp的,在整个bigworld中只有一个。本篇就BaseAppMgr的一些核心功能进行分析: (1) BaseAppMgr是如何通知BaseApp创建Entity的 (2) BaseAppMgr如何针对多个BaseApp做负载的 (3) BaseAp...
阅读全文
摘要:loginApp是整个bigworld进行用户认证的服务,是用户进入游戏的第一步。本篇主要针对loginApp的认证流程,如何和其他服务进行交互,以及loginApp针对多服务负载的不同做法进行分析。 1. loginApp用户认证流程 用户通过loginApp认证,主要是以下几个步骤: ...
阅读全文
摘要:对于网络游戏服务器开发熟悉的人,基本都知道bigworld引擎,此引擎包括客户端部分和服务器部分,已经有很多知名的网络游戏通过bigworld来构建游戏。我主要关注bigworld的服务器部分,它是一个分布式的网游服务器,理论上可以支持任意数量的玩家在线游戏,希望通过阅读其源代码能让我知道如何开...
阅读全文
摘要:以前项目中是C++嵌入Python,开发起来很便利,逻辑业务可以放到python中进行开发,容易修改,以及功能扩展。不过自己没有详细的研究过C++嵌入python的细节,这次详细的研究一下。首先我们简单的使用C++调用一个Python的py脚本,然后通过Python使用C++中的对象和方法。我们...
阅读全文
摘要:在服务器里面需要用到从一组数中随机M个不同的数出来的需要,这种需求实现出来本身不复杂,最简单的就是一直随机,每次随机出来的数字判断是否跟之前有重复,如果没有就加入返回队列中。这种简单的算法在数据源很大,需要随机的数很少的时候,效率还是可以的,而且实现非常简单。但是在数据源本身就很小,而且需要随机...
阅读全文
摘要:前几天程序新加一个功能之后,其中用到了boost的lexical_cast,发现在关闭命令行窗口的时候,程序报错,是程序退出清理时候报的错误。 一开始以为是程序新增的功能有问题,发现去除新功能之后,随便在一个函数中使用lexical_cast,程序在退出的时候都会报错。 所以怀疑是自己程序功...
阅读全文

浙公网安备 33010602011771号