- 博客(17)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 gdb中python扩展脚本打印stl容器内容
gdbinit文件中增加如下配置:import syssys.path.insert(0, 文件的路径)from libstdcxx.v6.printers import register_libstdcxx_printersregister_libstdcxx_printers (None)gdb启动的时候会加载此文件高版本gdb安装的时候会带有python脚本文件,只需要增加...
2020-02-14 20:42:59 831
原创 c++实现boost中信号(c++观察者模式)
boost中信号用着特别简单,需要就注册不需要要就删除,可以注册任意的对象函数,只要触发信号所有注册了该信号的对象都会被调用。下面就自己实现一个类似的功能。首先实现一个信号发送者的基类,所有需要发送信号的对象都继承该类就可以了,代码如下://发送信号class CRecvSignal;class CSendSignal{public: friend class CRecvSi...
2020-01-05 17:25:50 393
原创 epoll ET模式读和写
在c++网络编程中几乎都会使用epoll模式,epoll提供了两种触发模式ET(边缘触发)和LT(水平触发 默认的触发模式)。边缘触发就是当有可读事件之后如何一次没有读取完所有数据那么epoll不会在触发可读事件,只有再次从不可读变为可读才会再次触发可读,可写也是同样的道理。水平触发就是只要可读就会不断触发可读事件,只要可写就会不断触发可写事件。所以一般大并发服务器都会使用ET模式,这样比LT模式...
2020-01-04 09:13:00 508
原创 rsp寄存器栈回溯
c++开发总是少不了服务器crash,多数情况都可以通过bt命令直接查看函数的调用堆栈信息来找到问题的根源,但是偶尔可能会出现bt无法打印出栈信息的情况,出现这种情况的原因有很多,比如编译优化会去掉函数调用指针,就可能无法回溯栈。不巧的是前断时间服务器就出现了一次crash并且bt无法显示出函数调用堆栈信息,没有堆栈信息的情况基本上是无法定位到错误原因的,上一次出现这种情况的时候已经是四年前了,只...
2020-01-01 14:38:19 1794
原创 EPOLLRDHUP的坑
游戏服务器中很多平台都会要求进行数据上报,数据上报都是使用http协议。我们游戏服务器的网络都是自己实现的,没有使用第三方网络库,所以在进行数据上报的时候也就自己用c++实现简单的http请求。由于网络一直都是使用EPOLLRDHUP作为断开网络处理,该事件会比使用EPOLLIN和EPOLLOUT高效,但是在http协议中使用的时候可能会存在问题。EPOLLRDHUP表示的是对方读挂起,可能对方还...
2020-01-01 14:15:04 802 2
原创 c++游戏服务器配置加载管理实现
做过游戏的都知道在游戏服务器中配置文件很多,基本上会达到两三百张配置表,而加载配置的方式有很多,下面就为大家介绍几种配置加载的方式。首先简介一种常用的也是最简单的方式,那就是包含所有的配置文件一个个的调用,代码大致如下://a.h 配置文件abool loada();//加载配置文件a//b.h 配置文件bbool loadb();//加载配置文件b……//cfgmgr...
2019-12-29 16:44:07 505
原创 c++实现boost中的post函数功能
用过boost中post函数后发现她可以接收任意无参函数包括lambda函数,但是对于boost的使用内心是有点抵触的,前面两个项目使用boost后导致编译特别慢,所以不想在使用它了,小团队根本就没有代码审查这种东西,头文件包含越写越乱,最后导致基本上所以的cpp文件都间接包含了boost中的库文件,最后发现整个项目头文件依赖达到百万个之多。但是boost中确实有很多值得学习的东西,既然是好东西拿...
2019-12-29 15:28:06 1437 1
原创 c++ WebSocket Secure服务器(wss服务器)
做h5游戏,之前是自己写的epoll网络通信,所以开始项目的时候都没有多想就直接自己写了一个websocket网络,而不是使用第三方的ws库。一直用都没有出现问题,但是项目上线前一周前端对接sdk的时候说平台只支持https不支持http,所以后端必须的使用wss通信,惊闻这个消息的时候已经周四了,离上线还有三天时间。想着如果用完全不了解的第三方库还不知道会出现什么问题,而且第三方库引入项目估计网...
2019-12-29 14:11:57 4384 2
原创 c++ websocket服务器
h5游戏中网络通信不在使用二进制协议,而是使用websocket(ws) 或者使用基于https的wss进行通信,但是已经自己实现过n次二进制协议通信了,所以也不想使用第三方库的实现。下面就介绍下如何使用c++自己实现一个ws服务器,下一篇文章在介绍wss实现。其实ws的实现只是在二进制协议的基础上增加了一层简单的封装而已,实现并不难。下面介绍ws相关的处理,不会详细介绍epoll的实现部分。...
2019-12-29 11:44:35 1407
原创 epoll各个事件触发条件
可读触发:epollin epollout可写触发: epollout对方主动关闭socket:epollrdhup epollin epollout自己方socket出现问题才会触发epollerr epollhup,但是我在项目中发现也会同时触发epollin和epollrdhupepollerr和epollhup是默认注册的所以我们在注册时间的时候不用注册了。epollrdh
2017-01-25 11:02:12 3984
原创 linux中使用select和epoll确定异步connect连接是否成功
服务器开发中网络编程是一项基本技能也是重要的技能,在高并发socket编程中我们经常会使用到异步socket也就是非阻塞socket。下面记录下非阻塞socket中如何判断connect连接是否成。在非阻塞socket调用connect函数之后可能出现的情况有:1 connect函数直接返回0,那么恭喜你连接直接成功了,不用考虑其他问题了。2 连接返回错误,errno等于EINPROGRE
2016-07-31 23:07:17 7539 2
原创 游戏服务器排行榜的设计
排行榜是游戏服务器中不可缺少的一部分,几乎所有的游戏都有排行榜。游戏排行榜根据排行榜需要上榜的人数有不同的设计,但是普遍来说一般都是显示前100名或者50名,排行榜排100,1k,1w人数,超过1w名次的很少需要进行排名不过也不排除特别的排行榜。下面设计的排行榜可以满足1w名以内的排行榜,并且是实时排行榜。超过1w估计就的用其他的解决办法了。其实排行榜可以直接用数据库,nosql,静态链表,map
2015-07-23 22:49:11 3865 1
原创 crypto++ 中DES AES RC5 RC6 TEA XTEA XXTEA加密算法性能比较
AES,DES,RC5,RC6,TEA,XTEA,XXTEA加密算法性能比较,AES-NI指令对加密性能的影响。游戏服务器中加密算法的选择。
2015-06-27 16:27:03 5836
原创 clang编译luabind项目报错和tcmalloc内存释放
/*namespace luabind {class object;class argument;template struct table;} // namespace luabind*/namespace luabind { namespace adl { class object; class argument; template struc
2015-06-05 09:43:22 1191
makefile模式匹配提示无法找到规则
2014-10-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人