随笔分类 -  coding

1 2 3 下一页
代码
SIGPIPE导致程序无故中止
摘要:最近在开发新项目,使用的是旧的代码,因此要进行一些代码的删减和优化。在win下开发时,一切正常,但在Linux下,发现其中一个模块在启动时会偶发性无缘无故中止,没有异常日志,没有core dump,内核那边也没有异常,进程直接就消失了。 我以为是系统环境变量没设置好,但使用命令ulimit -a查看 阅读全文
posted @ 2023-04-12 20:42 coding my life 阅读(217) 评论(0) 推荐(0)
Lua 5.3 hashint函数缺陷导致遍历table性能非常差
摘要:最近发现线上有个服务器某些逻辑耗时比较久,问了下同事,他告诉我是因为lua的pairs函数很慢导致的。 “啊!不至于吧,这数据量才多少”我一脸诧异,记忆中Lua不至于慢到这种程度,遍历个几十万的table速度还是很快的,而我们线上的这个table数据量才几万。 他把线上的数据导了出来,做了一个测试, 阅读全文
posted @ 2022-12-18 21:29 coding my life 阅读(821) 评论(0) 推荐(0)
Socket缓冲区过小触发TCP Nagle's algorithm算法导致网络延迟大
摘要:在游戏服务器当中,通常都会为每个客户端链接设置一个缓冲区。这样做的理由是游戏中通常会有持续不断,零碎的数据包发送到客户端,使用一个缓冲区可以把这些数据包攒到一起发送,避免频繁的io操作;另一个原因是,处理游戏逻辑的线程通常和io操作的线程是分开的,因此游戏逻辑线程把数据放到缓冲区后可以继续处理后续的 阅读全文
posted @ 2022-05-06 23:19 coding my life 阅读(794) 评论(0) 推荐(0)
C++ STL chrono和clock_gettime的性能对比
摘要:#include <iostream> #include <chrono> #include <ctime> int main() { const int ts = 1000000; std::chrono::steady_clock::time_point beg; std::chrono::st 阅读全文
posted @ 2022-04-23 16:09 coding my life 阅读(2808) 评论(0) 推荐(0)
C++使用mutable在const成员函数中加锁
摘要:业务逻辑写多了,有些基础的东西就忘了,写在这里仅仅是做个笔记。 最近要把自己的程序改成多线程,其中有一个缓冲区类,大概是这样的: class Buffer { public: /** * 获取当前缓冲区中已分配的chunk数量及总内存,用于统计 */ void get_mem_info(int& c 阅读全文
posted @ 2022-03-20 17:39 coding my life 阅读(1069) 评论(1) 推荐(1)
C++中atomic和mutex的对比
摘要:最近在优化自己以前写的一个程序,其中io部分由单线程的Reactor模型改成多线程的Proactor模型。即原来是异步io事件唤醒线程,进行io读写,现在是一个线程进行异步io读写,然后把数据交给另一个线程进行逻辑处理。那这就涉及到一个线程数据交换的问题,由于是io数据,这个需要交换的数据还比较大, 阅读全文
posted @ 2022-01-08 18:09 coding my life 阅读(1870) 评论(0) 推荐(1)
游戏服务器AOI的实现
摘要:在一个场景里,怪物A攻击了玩家B,玩家B掉了5血量。玩家B反击,怪物A掉了10血量。玩家C在旁边观看了这一过程,而在远处的玩家D对这一过程毫无所知。这是MMO游戏中很常见的一情景,从程序逻辑的角度来看,把它拆分成以下几部分 怪物A感知玩家B在攻击距离内,释放了技能,并把整个过程广播给附近的玩家B、玩 阅读全文
posted @ 2021-01-24 16:19 coding my life 阅读(7787) 评论(1) 推荐(2)
CMake优先链接静态库
摘要:当使用CMake来生成编译脚本时,如果需要链接其他库文件,一般使用target_link_libraries,如: target_link_libraries(master flatbuffers mariadbclient ssl crypto dl rt pthread resolv z ) 默 阅读全文
posted @ 2020-11-22 13:10 coding my life 阅读(29583) 评论(0) 推荐(4)
IPv6与IPv4的兼容
摘要:IPv6出来已经很多年,虽然距离普及还很远,但项目里要加上,有没有人用是一码事,但不加上肯定过不了审。IPv6最大的问题是包格式与IPv4不兼容 IPv4包格式 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 阅读全文
posted @ 2020-11-20 23:15 coding my life 阅读(8182) 评论(0) 推荐(1)
OpenSSL证书认证过程
摘要:游戏服务端这块,之前是很少用SSL的,毕竟游戏里的数据没有什么保密的必要,登录、充值也是传输签名,不涉及密码什么的。不过这几年,HTTPS普及得比较快,H5游戏发展迅速。H5游戏是基于web的,和后端通信一般走websocket,加不加SSL其实对于游戏影响不大。但是不少平台都要求加SSL的,一是用 阅读全文
posted @ 2020-11-01 18:26 coding my life 阅读(6629) 评论(0) 推荐(1)
Lua os.clock在win和linux下的差异
摘要:最近在做一些框架的优化工作,其中一个就是完善测试用例,在进行http模块测试的时候,我注意到输出的时间有异常 [T1LP10-20 19:25:09]http(s) test [T1LP10-20 19:25:19][ OK] http get example.com (25ms) [T1LP10- 阅读全文
posted @ 2020-10-24 14:57 coding my life 阅读(714) 评论(0) 推荐(0)
Lua大整数的实现
摘要:大整数 程序中基础的数据类型,如double、int64_t之类的,其大小都是有上限的,假如有一个数10000000000...(后面接10000个0),那么现在的数据类型是表示不了的,这时候就需要可以无限增长的整数,即大整数。作为一个游戏开发的程序员,我怎么也没想到需要用到大整数。虽然这几年游戏的 阅读全文
posted @ 2020-10-18 14:50 coding my life 阅读(3900) 评论(0) 推荐(0)
std::allocator在stl容器中使用问题
摘要:stdallocator常用于stl中的各种容器。对应的,stl的容器中也提供了相应的内存分配器参数。当需要统计内存的使用或者自定义内存分配时,十分有用。以stdvector为例: // std=c++11 // https://www.cplusplus.com/reference/vector/ 阅读全文
posted @ 2020-08-30 11:46 coding my life 阅读(1139) 评论(0) 推荐(1)
lua使用自定义类型作key
摘要:前端使用typescript,后端使用C++和lua,在讨论后端下发的int64类型值如何处理时,我建议前端使用long.js,但前端说他需要用这个作key,而js没法用自定义类型作key。我回了一句“js居然没法用自定义类型作key,这么弱”,但是说完这句话,我就愣住了,貌似那里不对。 我认为任何 阅读全文
posted @ 2020-08-02 12:19 coding my life 阅读(1075) 评论(0) 推荐(0)
C++左值、右值、左值引用、右值引用与move语义
摘要:左值与右值 C++的值现在分为很多种类型:lvalue、xvalue、glvalue、rvalue、prvalue,具体定义见:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3055.pdf An lvalue (so-called 阅读全文
posted @ 2020-05-04 15:50 coding my life 阅读(1047) 评论(0) 推荐(0)
lua table vs closure
摘要:最近在重构自己写的框架中的定时器模块,需要把回调函数保存起来,大概如下: 正常情况下,用table保存定时器的回调参数,毕竟lua中也没有太多的数据结构可以选择。不过,我们也可以这样用closure来保存: 这样似乎看起来更优雅更方便一些,不过,频繁创建closure也是很消耗内存和cpu的,需要和 阅读全文
posted @ 2019-05-25 21:32 coding my life 阅读(193) 评论(0) 推荐(0)
C++手动调用析构函数无效问题排查
摘要:在学习C++的时候,都知道不要手动调用析构函数,也不要在构造函数、析构函数里调用虚函数。工作这么多年,这些冷门的知识极少用到,渐渐被繁杂的业务逻辑淹没掉。 不过,最近项目里出现了析构函数没有被正确地调用,导致内存泄漏。代码大概如下: 公司的框架要求使用统一的内存分配器。像读取配置这种逻辑,在配置不需 阅读全文
posted @ 2019-05-17 22:49 coding my life 阅读(1633) 评论(0) 推荐(0)
C++ std::unordered_map使用std::string和char *作key对比
摘要:最近在给自己的服务器框架加上统计信息,其中一项就是统计创建的对象数,以及当前还存在的对象数,那么自然以对象名字作key。但写着写着,忽然纠结是用std::string还是const char *作key,哪个效率高些。由于这服务器框架业务逻辑全在lua脚本,在C++需要统计的对象没几个,其实用哪个没 阅读全文
posted @ 2019-04-20 12:12 coding my life 阅读(8554) 评论(1) 推荐(1)
C++重写new和delete,比想像中困难
摘要:关于C++内存管理这话题,永远都不过时。在我刚出道的时候,就已经在考虑怎么检测内存泄漏(https://www.cnblogs.com/coding-my-life/p/3985164.html)。想用一份简单的代码,并且不太影响执行效率去实现内存泄漏检测,是不太现实的。当时觉得重写new和dele 阅读全文
posted @ 2019-01-06 16:28 coding my life 阅读(4267) 评论(0) 推荐(0)
Protocol Buffers与FlatBuffers效率对比
摘要:Protocol Buffers是Google跨语言、跨平台的通用序列化库。FlatBuffers同样出自Google,而且也跨语言跨平台,但更强调效率,专门为游戏开发打造。在游戏界混了几年,各种各样的序列化协议都见过,MUD的字符串、Json、二进制、Protocol Buffers,各有各的优缺 阅读全文
posted @ 2017-08-06 22:42 coding my life 阅读(3499) 评论(2) 推荐(1)

1 2 3 下一页