自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 资源 (3)
  • 收藏
  • 关注

原创 网狐架构之客户端大厅与客户端子游戏(斗地主)

客户端大厅与客户端子游戏斗地主交互过程1:启动:CDlgLogon::OnInitDialog()2:登录:CDlgLogon::OnOK()3:游戏列表中点击游戏响应CServerListView::OnNMLClick(NMHDR * pNMHDR, LRESULT * pResult)连接127.0.0.1 1372端口的游戏服务器(注意此处的游戏服务房间IP PORT为在大厅登...

2020-03-08 10:51:10 809

原创 网狐架构之客户端大厅

GamePlaza.exe启动过程分析:1:登录CDlgLogon::OnOK()CMissionLogon::PerformLogonMissionpMissionManager->AvtiveMissionItemm_MissionSocket.PerformConnectm_TCPSocketModule->Connect(m_dwCurrentServer,m_w...

2020-03-08 10:47:19 716

原创 网狐架构之游戏(装载子游戏服务)服务器

GameServer.exe启动过程分析:1:CGameServerDlg::OnInitDialog()m_ServiceUnits.SetServiceUnitsSink(this);m_pIServiceUnitsSink=pIServiceUnitsSink;// 同协调服务器过程注意此CServiceUnits隶属于游戏服务器的CServiceUnits2:创建房间CGam...

2020-03-08 10:44:55 1208

原创 网狐架构之登录服务器

启动过程分析:1:CLogonServerDlg::OnInitDialog()m_ServiceUnits.SetServiceUnitsSink(this);m_pIServiceUnitsSink=pIServiceUnitsSink;//同协调服务器过程2:启动服务:CLogonServerDlg::OnBnClickedStartService()m_ServiceUnits...

2020-03-08 10:42:43 964

原创 网狐架构之协调(中心)服务器

启动过程1:CCorrespondServerDlg::OnInitDialog()m_ServiceUnits.SetServiceUnitsSink(this);// m_ServiceUnits是CServiceUnits类型m_pIServiceUnitsSink=pIServiceUnitsSink;// m_pIServiceUnitsSink 是IServiceUnitsSin...

2020-03-08 10:40:45 682

原创 网狐架构之工作原理

服务端:1:启动协调服务器2:启动登录服务器3:启动装载服务器,启动后,加载房间,启动服务器(即启动了游戏服务),此时装在服务器会把启动的游戏服务IP PORT发送给协调服务器,协调服务器保存一下,然后发送给登录服务器,此时服务端所有服务就绪。等待客户端连接客户端:1: 启动大厅服务器,连接登录服务器,获取装载服务器中游戏服务的IP PORT 等相关信息,填充如下大厅左侧列表。2:点...

2020-02-27 11:10:34 1237 1

原创 网狐架构之游戏引擎GameEngine

1:由于GameEngine找不到源码,对于调试代码时,可在Debug模式下,引用Release版本的GameEngine

2020-01-20 10:01:31 755

原创 网狐架构搭建之后台管理账号密码

网狐后台管理(网狐棋牌管理平台)之账号密码:默认账号为:admin默认密码为:123456其账号密码在在QPPlatformManagerDB数据库–Base_Users表里就是后台的帐号和密码,密码是MD5加密换成:E10ADC3949BA59ABBE56E057F20F883E 这个密码就是123456...

2020-01-20 09:44:36 1293

转载 Nginx如何实现负载均衡

只是测试,以端口分别是10001和10002为例。2.Nginx负载均衡的集中方式介绍2.1 轮询轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。upstream dalaoyang-server {server localhost:10001;server ...

2020-01-16 19:26:36 143

原创 函数默认参数注意事项(C++)

如果从某个位置有了默认值,那么从这个位置开始,从左往右都必须得有默认值;下面的写法是正确的:void func(int a, int b=10, int c=20){ }void func(int a, int b, int c=20){ }但这样写不可以:void func(int a, int b=10, int c=20, int d){ }void func(int a, in...

2020-01-03 13:18:46 606

转载 自我实现string类(C++)

#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std; class String {public: String(const char* str);//默认构造 String(const String& str);//拷贝构造 String& operator=(co...

2020-01-03 13:01:17 133

转载 C++类占用内存大小(C++)

类所占内存的大小主要是由成员变量(静态变量除外)决定的,成员函数(虚函数除外)是不计算在内的。成员函数的存储还是以一般函数的模式进行存储。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。类中的成员函数相当于C语言中一个普通函数,按照一个普通函数的方式存储在内存中,做到使得两者相联系的功臣是...

2020-01-03 12:56:34 861

原创 STL之map与unordered_map对比

map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。map中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右...

2019-12-31 11:41:57 518

原创 STL容器之map unordered_map multimap....

multimapmultimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。///1. 初始化 multimap<int, string> mapStudent; multimap<int, string>::iterator iter, beg, end; ///2. 添加元素 ...

2019-12-31 11:31:53 204

原创 使用TypeScript脚本实现幂函数功能Pow(x, n)

let myPow = function (x, n) { let r = 1; let len = Math.abs(n); for (let i = len; i > 0; i--) { if (i % 2 == 0) { x = x * x; i = i / 2; } ...

2019-12-30 20:16:33 1232

转载 设计模式之单例模式(C/C++)

概念:单例模式是一种常见的软件设计模式。它的核心结构只包含一个被称为单例的特殊类。它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。应用场景:有一些对象只需要一个,如:对话框、系统日志、显卡等设备的驱动程序对象、一台PC连接一个键盘。单例模式有3种实现方式:懒汉式、饿汉式和双重锁的形式。懒汉:第一次用到类的实例的时候才回去实例化。饿汉:单例类定义的时候...

2019-12-23 10:59:26 359

原创 一个关于编解码格式的问题

C++服务端其中text.ini文件用notepad++打开,看右下角如下则表明此文件为GB2312编码,客户端解析时也要用此编码格式解析std::string strFilePathName = "C:/Test/text.ini";std::ifstream ifs(strFilePathName);std::stringstream sstr;sstr << ifs...

2019-11-22 15:34:28 142

原创 TypeSCript之Cannot set property 'n' of null

let bTest = { m:1, n:2 }bTest = nullbTest.n = 10

2019-10-30 15:31:09 611

转载 Redis主从同步机制详解

读写分离在redis主从架构中,Master节点负责处理写请求,Slave节点只处理读请求。对于写请求少,读请求多的场景,例如电商详情页,通过这种读写分离的操作可以大幅提高并发量,通过增加redis从节点的数量可以使得redis的QPS达到10W+主从同步:Master节点接收到写请求并处理后,需要告知Slave节点数据发生了改变,保持主从节点数据一致的行为称为主从同步。主从同步的方法(...

2019-10-23 14:00:52 1243 1

转载 Cocos2d-x 之Node的生命周期事件(Lua)

场景(Scene)以及所有节点(Node)的生命周期事件如下:enter。进入场景时候触发。enterTransitionFinish。进入场景而且过渡动画结束时候触发。exit。退出场景时候触发 。exitTransitionDidStart。退出场景而且开始过渡动画时候触发。cleanup。场景对象被清除时候触发。提示 GameScene场景中的(Scene)继承于节点(Node...

2019-10-22 14:02:24 560

原创 const与指针,const与函数

const与指针常量指针:指向常量的指针int b = 500;1、const int * a = & b;2、int const * a = & b;以上中*a不允许改变,指针a可变指针常量:指针本身是常量3、int * const a = & b;指针a不允许改变,*a可改变常量指针常量4、const int * const a = & b;...

2019-10-22 11:37:31 144

原创 结构型模式之代理模式

代理模式(Proxy Pattern) :给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。EJB、Web Service等分布式技术都是代理模式的应用。在EJB中使用了RMI机制,远程服务器中的企业级Bean在本地有一个桩代理,客户端通过桩来调用远程对象中定义的方法,而无须直接与远程对象交互。在EJB的使用中...

2019-10-17 15:01:29 129

转载 C++11之智能指针 shared_ptr/unique_ptr/weak_ptr

为了更加容易(更加安全)的使用动态内存,引入了智能指针的概念。智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。shared_ptr我们可以认为每个shared_ptr都有一个关联的计数器,通常称其为引用计数,无论何时我们拷贝一个shared_ptr,计数器都会递增。当我们给shared_ptr赋予一个新值或是shared_ptr被销毁(例如一个局部的shared_ptr...

2019-10-11 13:50:35 544

原创 在MFC中用测试整型数据输出(不调试的时候,测试时经常用到)

CString str; int a= 100; str.Format(L"%d",a); MessageBox(str);

2019-10-11 13:50:16 642

原创 刷新CListCtrl中的Item

CLitstCtrl *pList = (CLitstCtrl *)GetDlgItem(CListCtrl的ID);pList->InValidata();可实现CListCtrl控件的内容刷新。

2019-10-11 13:49:37 916

转载 OSG实现跟随节点的相机

本章教程将继续使用回调和节点路径(NodePath)来检索节点的世界坐标。本章目标:在一个典型的仿真过程中,用户可能需要从场景中的各种车辆和人物里选择一个进行跟随。本章将介绍一种将摄像机“依附”到场景图形节点的方法。此时视口的摄像机将跟随节点的世界坐标进行放置。---------------------------------------------------------------...

2019-10-11 13:49:21 1561

原创 创建MFC DLL后,需要在类中添加的东西

1.如果是一个基类派生了多了类,只需在基类中添加#define _EXPORTING#ifdef _EXPORTING#define CLASS_DECLSPEC __declspec(dllexport)#else#define CLASS_DECLSPEC __declspec(dllimport)#endif然后在其他派生类中添加此基类头文件即可2.在类(基类和派生...

2019-10-11 13:47:57 565

原创 关于UpdateAllViews以及调用OnDraw函数的一些问题

我在文档工作区画一条线,更改其线条颜色调用下面的函数void CSketcherView::OnElementChangecolor(){ CColorDialog ColorDialog; if (ColorDialog.DoModal() == IDOK) { m_ChangeColor = ColorDialog.GetColor();...

2019-10-11 13:47:33 1703

原创 VS2010创建基于对话框的项目后,打开此项目文件,内部各个文件所代表的含义

扩展名sln 记录关于解决方案中项目的信息。sdf 记录与解决方案的IntelliSense有关的数据。IntelliSense是在Editor窗口中输入代码时提供自动完成和提示功能的工具Resource.h这是标准头文件,它定义新的资源 ID。Microsoft Visual C++ 读取并更新此文件。StdAfx.h,StdAfx.cpp这些文件用于生成名为 T...

2019-10-11 13:47:15 876 1

原创 CTreeCtrl带CHECKBOX属性,实现联动效果(点击父节点全部子节点被选中)

1.为CTreeCtrl添加NMCLICK响应函数:void CCTreeCtrlDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult){ CPoint pt; unsigned int flag; HTREEITEM hCurrentItem; ...

2019-10-11 13:46:33 2358

原创 协程与线程的区别与联系

协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。一个程序可以包含多个协程;一个进程包含多个线程;多线程:相对独立,有自己的上下文,切换受系统控制;协程:相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。协程和线程区别:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标...

2019-10-11 10:53:30 616

原创 大端(big endian)和小端(little endian)

现在主流的CPU,intel系列的是采用的little endian的格式存放数据。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而 JAVA编写的程序则唯一采用big endian方式来存储数据。字节排序按分为大端和小端,概念如下大端(big endian):低地址存放高有效字节小端(little endian):低字节存放地有效字节以C/C++语言为例:对于...

2019-10-11 10:17:01 408

原创 Redis 连接池实现思想及优点

实现思想:连接池一般采用多线程+多Redis连接(连接池)方法如:服务端开启4个线程,并为同一个IP PORT 数据库的某个DBIndex 密码 开启4个连接;每个连接与线程ID对应起来,这样每个线程用自己对应的Redis连接,由此一个服务器的某个功能会同时使用多线程中的多个Redis连接,当在一个线程中要访问Redis时,根据线程ID得到对应的Redis连接进行访问,由此便能提升其性能...

2019-10-10 19:48:20 1732

原创 redis客户端与服务端交互过程

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务客户端:当一个连接建立后(1)客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应;(2)服务端处理命令,并将结果返回给客户端。服务端:(1)首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型;(2)然后为这个 socke...

2019-10-10 18:31:36 476

原创 Redis的原子性与事务

原子性:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,通过MULTI和EXEC指令包起来。事务:单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致...

2019-10-10 17:29:47 626

原创 Redis 常用数据类型及命令

StringString是最常用的一种数据类型,普通的key/value存储都可以归为此类,如get set 命令操作如set命令格式 set key value:set test:key-value nameHash(哈希)Redis hash 是一个 string 类型的 field 和 value 的映射表如hset命令格式hset key field value (用于为哈...

2019-10-10 12:07:27 166

原创 哈希表(散列表)解析以及哈希桶算法解析

哈希表:哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(关键字)这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散...

2019-09-24 20:01:22 1675

转载 TCP的三次握手与四次挥手

三次握手:四次挥手:1:为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可以直接一起发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了...

2019-09-20 18:52:33 162

原创 Socket与TCP/IP

使用TCP/IP网络协议时,一般都是基于Socket的API进行网络编程。应用程序通过Socket接口和内核交互,内核维护TCP/IP协议的具体通信过程。

2019-09-20 18:43:02 196

原创 STL容器迭代器失效之案例(vector)

对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。所以不能使用erase(iter++)的方式,还好erase方法可以返回下一个有效的iterator。vector<int> vec={1,...

2019-09-20 09:51:27 175

opengl配置文件.rar

VS2010无法打开包括文件:“GL/GLAux.h”: No such file or directory

2020-01-17

OSG三维渲染引擎设计与实践

OSG入门必备书籍 书中的例程都自己练练 相信读完本书,编程能力一定有很大进步

2015-12-14

最长的一帧

OSG入门经典必备资料 此书详尽说明了画面循环一帧后台代码所做的动作都有哪些

2015-12-14

空空如也

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

TA关注的人

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