自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蔡曜镫专栏

思绪如风,偶尔停留 https://github.com/caiyaodeng/

  • 博客(136)
  • 资源 (2)
  • 收藏
  • 关注

原创 c++企业级接口框架(一)

c++企业级接口框架SocketProtocol.h#ifndef _SOCKET_PROTOCOL_H_#define _SOCKET_PROTOCOL_H_/**说明:接口*/class SocketProtocol {public: virtual bool cltSocketInit () = 0; virtual bool cltSocketSen

2016-01-22 21:00:59 3403 5

原创 c++多重继承

c++多重继承二义性问题:  一般说来,在派生类中对基类成员的访问应该是唯一的,但是,由于多继承情况下,可能造成对基类中某成员的访问出现了不唯一的情况,则称为对基类成员访问的二义性问题。       通常再实际的是使用情况中,多重继承主要是用来进行接口的使用的。相当于java中的interface关键子字。实际例子:#include using namesp

2016-01-22 15:52:13 1165 1

原创 Linux 忘记mysql root密码简易步骤

这里写自定义目录标题Linux 忘记mysql root密码简易步骤Linux 忘记mysql root密码简易步骤systemctl stop mysqlmysqld start – skip-grant-tables直接输入mysql -u root -p 回车, (忽略密码)再回车UPDATE mysql.user SET Password=PASSWORD(‘xxx’) where USER=‘root’;flush privileges;service mysqld restart

2021-07-28 20:16:41 156

原创 无缝世界网游服务器架构设计思路(下)

无缝世界网游服务器架构设计思路(下)上次写了《无缝世界网游服务器架构的设计思路》,这次是续篇,主要内容是两种架构的优缺点分析。从一组服务器的角度来看,一般来说,我们的服务器组(Cluster)内都会有登陆验证服务器(Login Server)、持久性数据服务器(DB及DB Proxy)、连接代理服务器(Gate Server、FEP Server、Client Proxy等)以及Auto Pa...

2019-01-11 19:36:14 475

原创 无缝世界网游服务器架构设计思路(上)

无缝世界网游服务器架构设计思路(上)过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplayer Games Development 1 & 2 这两本...

2019-01-11 19:31:35 477

原创 Linux下编译安装log4cxx

Linux下编译安装log4cxxlog4cxx的官方下载地址是http://logging.apache.org/log4cxx/index.html ,我用的是apache-log4cxx-0.10.0版本。为了编译它,还需要两个辅助库,apr,和apr-util,可以在这里下载http://apr.apache.org/download.cgi ,我用的版本分别是apr-1.5.0.tar.g

2017-12-02 23:50:53 841

转载 GCC 4.8及以上支持内存非法访问检查

gcc4.8及以上版本支持地址越界,野指针检查,只需要在编译时使用-fsanitize=address选项即可,当运行程序时如果访问非本程序申请的地址就会报错。 root@localhost:/home/ngos/practice> vi nullpoint.c 1 #include “stdio.h” 2 3 int main(int a

2017-07-28 18:47:26 1748

原创 SGI-STL 迭代器实现

SGI-STL 迭代器实现 迭代器模式:该模式能够提供一种方法,使之能够依序寻访某个聚合物(容器)所含的每个元素,而又无需暴露该聚合物的内部表达方式。 ———————————————————————————————————————— 《STL源码剖析》它是什么?它其实就是算法与容器的一种粘胶剂。它像什么?迭代器的行为非常类似智能指针(SmartPointer),所以对他来说最重

2017-03-02 00:17:39 744

原创 模板化vs模板特化vs模板偏特化

模板化vs模板特化vs模板偏特化 编译器在编译阶段进行匹配时,抉择顺序:模板偏特化>模板特化>模板化代码直观template <typename T>class CTemplate{public: CTemplate() { std::cout << "一般模板" << std::endl; }};//模板化template <>class

2017-03-02 00:12:37 639

原创 RB-tree性质理解

RB-tree性质理解规则 每个节点的颜色非红即黑。 根节点的颜色必定为黑。 每个叶子节点是黑色的(指的是NIL节点)。 如果节点的颜色为红,其左右子节点的颜色必为黑。 任意节点到NULL(尾节点)的任意路径上包含的黑色节点数量必须一致。 根据以上规则,可以得出以下要求:新增节点的颜色需要为红。新增父节点的颜色需要为黑。为了能达到以上的要求,需要对变化后的红黑树

2017-03-01 14:11:48 795

原创 快速掌握一种语言的50%

快速掌握一种语言的50% 首先了解该语言的基本数据类型,基本语法和主要语言构造,主要数学运算符和print函数的使用,达到能够写谭浩强程序设计书课后数学习题的程度; 其次掌握数组和其他集合类的使用,有基础的话可以理解一下泛型,如果理解不了也问题不大,后面可以补; 简单字符串处理。所谓简单,就是Regex和Parser以下的内容,什么查找替换,截断去字串之类的。不过这个阶段有一个难点

2017-02-28 21:40:56 616

原创 C/C++函数参数为何是从右到左?

C/C++函数参数为何是从右到左?那是因为不定长参数函数的存在。。。。我们先看看printf函数 _Check_return_opt_ _CRTIMP int __cdecl _vfprintf_l(_Inout_ FILE * _File, _In_z_ const char * _Format, _In_opt_ _locale_t _Locale, va_list _ArgList

2017-02-28 16:46:39 3372 3

转载 GCC 编译选项

GCC 编译选项 gcc 提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-

2017-02-27 14:05:50 589

原创 浅拷贝与深拷贝

浅拷贝与深拷贝   在某些状况下,类内成员变量需要动态开辟堆内存,如果实行位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指向同一块内存。这就出现了问题:当B把内存释放了(如:析构),这时A内的指针就是野指针了,出现运行错误。   深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程

2017-02-27 12:00:24 384

原创 现代编译过程

现代编译过程编译过程分为五步:扫描解析文件预处理工作 处理宏定义,不管是由-D参数指定,还是在源码内部通过#define,或者使用了标准库,扩展库中的宏,都会替换为定义的值。 命令:cpp a.c>a.i 输出的a.i就是预处理过的文件,包含了完整的内容。 由此可以得出,宏不是运行时的定义内容,也不是编译时的内容,而是预处理阶段就完成的。编译阶段: 将源代码(也就是预处理过的代码)编译

2017-02-26 23:07:48 444

原创 静态变量与类大小关系

静态变量与类大小关系 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。如果Class A;A obj;那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所有非静态成员大小的总和。 为什么是大于等于而不是

2017-02-26 22:45:16 2224

转载 ET和LT触发方式

ET和LT触发方式 ET模式只能通过一种方式(图中红线)。所以ET模式下能被唤醒的情况,LT模式下一定也能被唤醒。我们先来讨论特殊情况(ET模式),再来讨论一般情况(LT模式)。ET根据上一节对两种加入rdlist途径的分析,可以得出ET模式下被唤醒(返回就绪)的条件为: 对于读取操 (1) 当buffer由不可读状态变为可读的时候,即由空变为不空的时候。 (2) 当有新数据到达时,即b

2017-02-26 15:49:57 641

转载 ET模式实现分析

ET模式实现分析ET和LT的实现区别 注:上图的poll不要理解成和select相似那个poll,这是通过epoll_ctl调用的。 下面简要分析一下epoll的工作过程: (1) ep

2017-02-26 15:32:10 932

转载 Epoll模型详解

Epoll模型详解内核中提高I/O性能的新方法epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。要使用epoll只需要这三个系统调 用:epoll_create(2), epoll_ctl(2), epoll_wait(2)。当然,这不是2.6内核才有的,它是在 2.5.44内核中被引进的(epoll(4) is a new API introduced in

2017-02-26 15:07:13 608

原创 剖析虚函数

剖析虚函数虚函数表对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要

2017-02-26 00:44:22 468

原创 游戏开发中常用的设计模式

游戏开发中常用的设计模式

2017-02-25 23:30:31 1397

原创 string、vector、list、deque、set、map区别

string、vector、list、deque、set、map区别在STL中基本容器有: string、vector、list、deque、set、map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问setset:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少mapmap:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采

2017-02-25 21:16:10 450

原创 STL容器 list、vector、map、set 使用的陷阱

STL容器 list、vector、map、set 使用的陷阱

2017-02-25 16:26:55 693

原创 STL的erase()陷阱-迭代器失效总结

STL的erase()陷阱-迭代器失效总结

2017-02-24 11:07:42 482

原创 IOCP相关梳理

IOCP相关梳理“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!

2017-02-15 22:03:36 473

原创 IOCP之accept、AcceptEx、WSAAccept的区别

IOCP之accept、AcceptEx、WSAAccept的区别[1]. accept、WSAAccept是同步操作,AcceptEx是异步操作 [2]. WSAAccept函数早accept函数基础上添加了条件函数判断是否接受客户端连接 [3]. AcceptEx是异步的,可以同时发出多个AcceptEx请求,支持重叠IO操作.

2017-02-15 11:35:28 659

原创 字字珠玑

字字珠玑不管任何理由,男人都不能打女人,女人也不该打男人。请千万不要在确定可以得到幸福之前,就把自己打包送给别人。人在犯错之后,有两种本能。一种是认错,一种是狡辩。我可以给你明天,但是并不代表我可以忘记今天。爱情是事业的一部分。感情有一天会变成合作的伙伴,生命的伙伴,生活的伙伴,幸福的伙伴。男人需要这么一种女人:只要我在你身边,我想要有多蠢就可以有多蠢。让我身上的理性放松下,而你身上的感性让我更轻松

2016-10-23 13:39:42 600

原创 游戏服务器结构分析(MapServer)

游戏服务器结构分析(MapServer)目录结构游戏资产(assets)状态(buff)持续时间(cd)物品(items)属性(property)空间资产(space_info)状态机(state_machine)基础结构(common)重定义基本数据类型(type_define)基础时间(xtime)原子操作(atomic)bit位管理(bitset)智能指针(smart_ptr)引用计数概念,所

2016-09-12 11:55:31 1162

原创 epoll源码探秘(epoll_ctl)

epoll源码探秘(epoll_ctl)

2016-08-25 11:22:44 2099

原创 epoll源码探秘(epoll_create)

epoll的源码浅谈

2016-08-24 10:34:12 5082 2

原创 vs2015 配置boost

vs2015 配置boost1、首先到boost官网去下载最新的版本的boost库:http://www.boost.org/http://www.boost.org/users/download/2、解压文件,在命令提示符中打开到boost库的根目录下:双击bootstrap.bat文件,生成bjam.exe,执行以下命令:

2016-07-08 08:06:36 6750

原创 物理内存不够,使用交换内存

物理内存不够,使用交换内存申请1个G的交换内存sudo dd if=/dev/zero of=/var/tmp/swap bs=1k count=1024000分区文件格式化为交换分区格式sudo mkswap /var/tmp/swap挂载到文件系统sudo swapon /var/tmp/swap卸载sudo swapoff /var/tmp/s

2016-05-30 10:34:26 1916

原创 vim-我的利器

vim-我的利器安装步骤:1.curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh                    2.作者jhnwsk的原话:If you run :h vundle it says that you can use :let g:vundle_default_git_prot

2016-05-25 09:24:31 576

原创 整型数据转二进制转字符方法(3)

整型数据转二进制转字符方法(3)int get_10(const unsigned char *strValue){ int a = 0; for(int i =0; i< 4; i++){ a += (strValue[i]&0xff) << (24-8*i); } return a; } unsigned ch

2016-05-19 11:09:35 516

原创 centos下安装libiconv

centos下安装libiconv1.wget -c http://www.itkb.ro/userfiles/file/libiconv-glibc-2.16.patch.gz2.cd libiconv-1.14/srclib3.--- srclib/stdio.in.h.orig      2011-08-07 16:42:06.000000000 +0300+++ src

2016-05-15 19:59:24 4269

原创 Centos7安装Boost

安装Boost1.下载 boost-1_52 http://sourceforge.net/projects/boost/files/boost/1.52.0/2. 将文件解压在/usr/local/目录下3. 进入/usr/local/boost-1_52_0/ 目录, 在terminal中输入             ./bootstrap.sh4.进入/usr/local

2016-05-09 13:43:22 5960

转载 网络服务器开发总结

网络服务器开发总结  一、概述经过多年网络服务器开发实战,于此总结实践体会。本文涉及到异步连接、异步域名解析、热更新、过载保护、网络模型与架构及协程等,但不会涉及accept4、epoll等基本知识点。  二、可写事件相信大多数初学者都会迷惑可写事件的作用,可能觉得可写事件没有什么意义。但在网络服务器中

2016-04-23 08:55:11 810

原创 C++思维导视

C++知识大纲和思维导视1.C++知识大纲:2.C++思维导视:

2016-03-20 15:37:49 764

原创 避免僵尸进程

避免僵尸进程 while(1){ ret = wait(NULL);

2016-02-13 15:53:15 510

原创 守护进程

守护进程概念:          什么是守护进程?          守护进程是在后台运行不受控端控制的进程,通常情况下守护进程在系统启动时自动运行守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。创建守护进程步骤:          1.调用fork(),创建新进程,它会是将来的守护进程          2.在父进程中调用exit,保

2016-02-07 21:47:26 650

CTR 安全连接

CTR 安全连接

2014-11-27

linux下安裝配置mysql

詳細地介紹例如何在linux環境線安裝配置mysql

2014-11-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除