- 博客(13)
- 收藏
- 关注
原创 mysql插入超过字段长度的新数据时,insert into on duplicate key和单纯insert into的区别
表结构如下现在插入一个查过128(26的英文字符循环5遍即130个字符)的字符insert into t_user (mold,open_id) values(1,‘ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ...
2019-05-31 18:11:00 1510
原创 多线程同步
同步手段:mutex、自旋锁、原子操作、条件变量、信号量、barrier(内存屏障)mutex:尝试获取锁,如果获取不到,内核将此线程放入队列、此线程休眠、当锁释放后,内核将mutex取出自旋锁:一直处于忙的状态,相对于Mutex不会挂起,此线程一直检测锁是否释放,释放获取锁,效率比mutex高,因为没有从挂起状态到运行状态的切换CAS的原子操作:在任意时刻又且仅能有一个线程对某个变量操作...
2018-12-10 21:01:36 160
原创 epoll的监听多个fd的read和send操作
核心代码如下m_bRunning = true; // first let's increase the limit of open files int maxconn = 100000; struct rlimit srl; srl.rlim_cur = maxconn + 10; srl.rlim_max = maxconn + 10; if (setrlimit(RLIM...
2018-12-06 21:11:05 2277
原创 服务器关闭客户端连接操作
所有玩家的数据都保存在map<fd, NetCache>里边,玩家在登陆成功后,会将fd和NetCache保存起来,同时将fd设置在玩家自己的身上,那么在什么时机会关闭fd连接呢?关闭连接操作如下void NetHandler::doCloseConnection(int fd){ if (fd > 0) { FD_CLR(fd, &...
2018-12-05 11:22:46 3677
翻译 Reactor模式处理高并发
1、epoll的同步编程方式如果是listenfd,那么放入epoll继续监听如果是可读fd,那么读取fd,并且处理读时间int main(int argc, char** argv){epoll_ctr(efd, ADD, fd);while(1){ epoll_wait(, event, ....); for(;;) { if(fd == listenr_scoket)...
2018-12-04 21:30:23 803
原创 玩家数据和活动数据的修改、保存、删除
玩家数据的修改 1、玩家发来的事件处理完完成后, 2、会保存玩家的UID(map《int64, bool》 m_mapUserSave)(表示这个玩家更新了数据), 3、保存玩家数据 3.1然后去从hash_map 《int64, User*》 & mapUsers找到玩家的数据,进行保存 3.2清除第二步中的玩家信息。 4、保存完成后, 添加该玩家的uid到...
2018-08-20 17:57:12 1066
原创 proxy代理服务器的代码实现
proxy代理服务器的作用是,通往两个世界的大门,这两个世界是客户端和服务器,通俗一点就是防火墙,意思就是客户端想要访问我服务器,需要连接proxy进行通信,proxy负责将消息转发给其他服务器,而这些其他服务器相对于客户端是不可见的,客户端只知道和proxy通信,知道linux的话,类似于一个跳板机。自此,笔者是一名卡牌游戏服务器工程师,语言为C++...
2018-08-14 18:25:31 2055 1
原创 游戏中排行榜代码实现
游戏设计中常常使用排行榜,根据排行发送排名奖励。排行容器的组成 记录排行的容器是一个由内部由vector和map组成的模板类 1.1.容器为什么这么设计 1.1.1vector部分的结构 其中vector里的元素使用的是pair, pair的first部分保存的是 uid(玩家ID),second部分保存的我们想要保存的任何信息(当然是一个类,或者结构体),然而vector的排列顺序...
2018-08-08 17:51:26 10331 4
原创 linux c程序崩溃前执行回调函数(包括打印core堆栈信息,也可以做我们想做的其他事情)
需求 如果程序崩溃的话,我们希望留下程序崩溃在的core信息,记录了程序崩溃的原因,崩溃的函数,甚至可以定位到文件的第几行 思想 实现思想很简单即是:使用信号捕捉。具体思想: 例如我们捕捉到段错误信号,那么就去执行回调函数执行,记录core信息,而linux c为我们提供了打印core信息的函数即是backtrace()函数,获取函数调用堆栈帧数据具体实现: 第一部分...
2018-08-04 16:51:13 2678
原创 通过CMakeLists.txt和shell脚本实现自动化编译
# CMakeLists filecmake_minimum_required(VERSION 2.6)project (server)#编译选项SET(CMAKE_CXX_FLAGS_DEBUG &amp;amp;amp;quot;-g -ggdb -Wall -Wno-unknown-pragmas&amp;amp;amp;quot;)SET(CMAKE_CXX_FLAGS &amp;amp;amp;quot;-std=c++0x -Wno-
2018-08-04 15:34:01 3724 1
原创 奇怪的代码
bool类型意义不明确void MatchAndGameManager::SendReconnectRes( int gameid, int64 uid, bool **yesorno** ){ if ((gameid <= 0) || (uid <= 0)) { return; } Event evt; Trans...
2018-08-03 21:05:40 910
原创 侯捷STL源码分析:priority_queue 读书笔记
概述 priority_queue是一个可以自动排序的queue,queue的特性是只能底入头出。成员函数 bool empty() size_type size() const_reference top() void push(const value_type&amp;amp;amp;amp; x)//先将元素插入到底层的最底端,然后重新排序 void pop()//先进行排序,然后在弹出顶端没有...
2018-08-02 16:29:35 184
原创 STL set的自定义比较函数,导致插入相同数据,导致程序程序崩溃
include include include includeincludeusing namespace std;int ciStringCompare(const string &amp; lhs, const string &amp; rhs); struct CIStringCompare : public binary_fun...
2018-08-02 15:43:58 1155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人