自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (4)
  • 收藏
  • 关注

转载 游戏服务器架构发展史(上)

《游戏服务端架构发展史》转载请著名出处:http://www.skywind.me/blog/archives/1265 类型1:卡牌,跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,

2018-01-15 21:31:14 808

转载 游戏架构设计的一些整理

一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块。这里说的模块可以指一个进程,或者一个线程方式存在,本质上就是一些类的封装。对于服务器的并发性,要么采用单进程多线程,要么采用多进程单线程的方式,说说两种方式的优缺点:一、单进程多线程的服务器设计模式只有一个进程,但一个进程包好多个线程:网络通讯层,业务逻辑

2017-08-27 22:40:24 20252

转载 C++ 中头文件重复定义的问题

一、同一头文件中类嵌套的疑问假设我们有两个类A和B,分别定义在各自的头文件A.h和B.h中,但是在A中要用到B,B中也要用到A,像下面的写法是错误的: class B;class A { public: B b; };class B { public: A a; }; 因为在A对象中要开辟一块属于B的空间,而B中又有

2017-08-17 17:00:02 1270

转载 tcp粘包分析

这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一 .两个简单概念长连接与短连接: 1.长连接Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如

2017-08-07 17:59:22 352

原创 网络基础

谈到网络,首先就需要知道计算机网络中的两个参考模型,即OSI参考模型与TCP/IP参考模型。 OSI参考模型 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、运输层、会话层、表示层和应用层),即ISO开放系统互联参考模型。在这一框

2017-08-04 16:12:45 433

原创 单例模式之 懒汉和饿汉模式

1.懒汉模式2.饿汉模式单例模式是设计模式中比较简单的一种。适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。单例模式要保证的就是全局只有一个对象存在;所以很容易就能想到把构造析构定义为protected或者private,这样类外无法

2017-08-03 16:15:17 562

转载 Memory barrier(内存屏障)

理解 Memory barrier(内存屏障) 发布于 2014 年 04 月 21 日2014 年 05 月 15 日 作者 name5566 参考文献列表: http://en.wikipedia.org/wiki/Memory_barrier http://en.wikipedia.org/wiki/Out-of-order_execution https://www.kernel.

2017-08-03 15:22:20 648

转载 C语言模拟实现C++的继承与多态

一、面向过程编程与面向对象编程的区别 众所周知,C语言是一种典型的面向过程编程语言,而C++确实在它的基础上改进的一款面向对象编程语言,那么,面向过程与面向对象到底有什么样的区别呢?【从设计方法角度看】 面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来。 面向对象程序设计方法是将数据和对象的操作封装在一起,作为一个整体来处理。【从维护角度看】

2017-08-03 11:16:18 316

转载 堆和栈的区别(转过无数次的文章)

一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似

2017-07-30 16:22:26 224

原创 C++中的隐藏、重载、覆盖(重写)

1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。令人迷惑的隐藏规则 本来仅仅区别重载与覆盖并不算困难,但是C++的隐藏规则使问题复杂性陡然增加。

2017-07-28 11:48:17 283

原创 静态成员和静态成员函数

一、静态成员的特点:(1)static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进行初始化; (2)static数据成员只能在类的外部进行初始化(特例:当整型const static数据成员被常量表达式初始化时,就可以在类的内部进行初始化,但还需要在外部进行定义)。 (3) static数据成员可以是该成员所属的类类型,而非static数据成员只

2017-07-24 15:52:50 1932

原创 Linux下的eval以及和$(),``

假设cmd=” echo 33” eval $cmd 等价于 “echo 33 ” 其实相当是先让后边的变量先执行,再执行其结果; 同时这些需要进行两次扫描的变量有时候被称为复杂变量。同时在shell脚本中还有等价的两条命令“ ,$() 都是做命令替换的,和上面变量替换差不多;都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。$( )与`` 在操作上,这两

2017-07-18 10:19:56 394

转载 HTTP协议详解(真的真的很经典)

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

2017-07-03 22:24:00 1247

原创 正则表达式详解

正则表达式关于正则表达式的来源和历史有感兴趣的小伙伴直接看百度百科就好;正则表达式你可以理解它是用事先规定好的一些符号,及一些特定组合来组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑”,来过滤你想要找出的字符串;而其强大之处在于,这个规则是通用的,不管你在哪个版本,哪里,只要是支持正则表达式,他就是这个规则,所以还是有必要记一记的;下面就来说一说这些事先定好的规则,主要分为

2017-07-03 22:10:32 736

原创 线程死锁

死锁 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去;死锁产生的四个必要条件: 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求

2017-07-02 17:31:47 222

原创 线程安全与可重入函数

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据; 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的

2017-07-02 17:15:13 429

原创 CRC校验

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数

2017-06-26 23:11:59 311

原创 NAT技术和代理服务器

NAT技术是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT技术; NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某

2017-06-25 23:37:19 227

原创 路由选择协议

先说一下理想的路由算法:算法必须是正确的和完整的 “正确”的含义是:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和主机;算法在计算上应简单 路由选择的计算不应该使网络通信量增加太多的额外开销;算法应能适应通信量和网络拓扑的变化 这就是说要有自适应性。当网络中的通信量发生变化时,算法能自适应改变路由以均衡各链路的负载;当某个或某些结点、链路发生故障不能工作,或者修理好了再

2017-06-25 22:48:49 880

原创 软件端口

软件端口是应用层的各种协议进程与运输实体之间进行层间交互的一种地址;端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互的层间接口,它是用16位来标志的,所以最多有65535个不同的端口;其主要分为两大类:服务器使用的端口号 这里又分为两类,最重要的一类叫做熟知端口号或系统端口号,数值为0~1023;这些数值可在网址www.iana.org上查到;IANA 把这些端口号指

2017-06-24 22:11:44 4465

原创 TCP--server升级版

前面已经编写完基本的TCP服务器和客户端了;现在要对服务器做一个改进版本的,前面的服务器,其实只支持一个访问,因为当我们监听到一个程序的时候,本进程只能服务其一个socket; 现在来写一个支持多用户访问的,其中有好几个方法,可以来支持多用户访问;可以使用多进程,每当监听到一个请求时,就创建一个进程来让子进程去为他服务;这样就可以再去监听下一个请求了; 53 int id =

2017-06-23 18:45:45 348

原创 TCP--client

上章说完服务器,再来说一下客户端吧; 客户端的任务就轻松多了,由于客户端不需要固定的端口号,因此不必调⽤bind(),客户端的端口号由内核⾃动分配。客户端不是不允许调⽤bind(),只是没有必要调⽤bind()固定⼀个端⼜号,服务器也不是必须调⽤bind(),但如果服务器不调⽤bind(),内核会⾃动给服务器分配监听端⼜,每次启动服务器时端口号都不⼀样,客户端要连接服务器就会遇到⿇烦。所以客户端只

2017-06-23 18:09:13 315

原创 TCP--server

一个在linux下的基于tcp的服务器和客户端;具体的网络基础参照谢希仁老师的《计算机网络》来入门;在TCP/IP协议中,“IP地址+TCP或UDP端⼜号”唯⼀标识⽹ 络通讯中的⼀个进程,“IP地址+端⼜号”就称为socket;先说一些规定吧:TCP/IP协议规定,⽹络数据流应采⽤⼤端字节序,即低地址⾼字节。先发出的数据是低地址,后发出的数据是⾼地址。所以为了程序的移植性,系统提供了一些接口

2017-06-23 17:58:04 1021

原创 linux--man 1/2/3查找的区别

man 1 命令man 2 xxx用于系统调用man 3 xxx 用于库函数如果某个库函数没有同名的命令和系统调用,那才能直接用man xxx

2017-06-21 16:03:34 1004

原创 TCP--三次握手四次挥手

假设现在有主机A运行的是TCP客户程序,主机B运行的是TCP服务器程序,最初两台机器都是关闭状态,现在主机A主动打开,而主机B被动打开,如图: 这里就不详细讲述其具体过程,只研究其为什么是三次握手;假设是两次握手的话,那么当这两种情况出现时就会有问题:假设当A主机第一次发出的请求在网络当中被滞留,以至于触发了TCP中超时重传,这时候主机A会再次发送一个连接请求,这时候B主机收到第二个请求并回

2017-06-19 22:48:55 343

原创 TCP定时器

TCP中一共有四种定时器: 重传计时器:Retransmission Timer 坚持计时器:Persistent Timer 保活计时器:Keeplive Timer 时间等待计时器:Time_Wait Timer。重传计时器 为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生了两种情况:若在计时器超时之前

2017-06-19 20:39:10 289

原创 网络--tcp协议中控制位

网络层中的tcp协议 首先看一下tcp的报头信息 其中其余的好理解,但是它是拥有了6个控制位的,说明了此次报文段的性质:紧急URG(URGent) 当URG等于1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按照原来的排队顺序来传送。 当URG置为1的时,发松应用进程就告诉发送方的TCP的有紧急数据要传传送,于是发送方TCP就把紧急

2017-06-19 17:28:28 3716

原创 linux进程间通信--管道

作为进程间通信的第一篇,那么先来讲述一下什么是进程间通信吧; 因为每个进程各⾃有不同的⽤户地址空间,任何⼀个进程的全局变量在另⼀个进程中都看不到所以进 程之间要交换数据必须通过内核,在内核中开辟⼀块缓冲区,进程1把数据从⽤户空间拷到内核缓 冲区,进程2再从内核缓冲区把数据读⾛,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。先来说进程间通信第一种方

2017-06-13 20:18:37 329

原创 文件指针和文件描述符的区别

文件指针:在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 FILE *指针变量标识符; 其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。 在使用文件时,需要在内存中为其分配空间,用来存放文件的基本信息,给结构体类型是由系统定义的,C语言规定

2017-05-10 16:00:21 556

原创 huffman文件压缩及其解压(附源码,针对各种文件)

huffman压缩简介 构建压缩信息开始压缩 统计字符建立huffman树得到huffman编码将huffman编码压缩书写配置信息解压缩 读取配置信息重新建树还原文件整体源码 test.cppcompress.hHuffmanTree.hHeap.hhuffman压缩简介哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,该方法完全依据字符

2017-05-04 17:06:30 823

原创 两个队列实现一个栈

使用两个队列来模拟实现一个栈的功能因为队列的特性是先入先出,栈的特性是后入先出,所以相当于是把一开始入到队列里面的数据先出出去,直到剩下最后一个数据,也就是本来栈中应该弹出的最后一个进入的数据,所以两个队列,就来回倒,就好了,每次都出队列中最后一个数据就好;因为queue中有一个接口是back,即队列的尾数据,刚好相当于队栈top的数据,所以比较与两个栈实现一个队列中模拟front会简单一些;#i

2017-05-03 10:36:36 313

原创 两个栈实现一个队列

使用两个栈实现一个队列,这样对于stl中栈和队列的使用算是一个小考察;因为栈的特性是后入先出,而队列的特性是先入先出,所以就是最先入栈的数据要第一个出来,假设我们push的数据都放到了stack1中,所以我们pop的时候我们需要先将stack1中的数据都出到stack2中,这样本来最后进来的数据就变成stack2中最先进来的数据,最先进来的数据变为stack2中最后进来的数据,所以我们pop的时候直

2017-05-03 09:21:37 205

原创 linux下孤儿进程和僵尸进程

我们知道在linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。  孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init

2017-04-19 22:14:47 422

原创 Linux下的进程控制块(PCB)task_struct

或许你对于task_struct是感到陌生的,那么你就先要知道task_struct是进程控制块(PCB)在linux下的一个具体的实现就好,如果你不知道什么是进程控制块的话,那就先看进程,然后再一步一步来;什么是进程? 在之前的操作系统的课程学习中,给出的定义:进程是程序的一次动态的执行过程。(这样,你真的是能想明白吗?概念确实是比较抽象的,反正之前学习的时候我不是很清楚的)。进程=程序段

2017-04-13 20:17:46 712

原创 Linux中find指令的常用选项及示例

Linux下find命令在目录结构中搜索⽂件,并执⾏指定的操作。 Linux下find命令提供了相当多的查找条件,功能很强⼤。由于 find具有强⼤的功能,所以它的选项也很多,其中⼤部分选项都值 得我们花时间来了解⼀下。即使系统中含有网络⽂件系统( NFS), find命令在该⽂件系统中同样有效,只你具有相应的权限。 现在我就find这条命令及其常用选项做个描述:

2017-03-30 19:06:32 932

原创 Linux中粘滞位的实现及作用

在上篇文章中提到了关于权限的事情,然后就发现一个很有趣的事情,直接上示例: 这个时候我们在root下创建了一个目录叫做test目录,并将其的权限改为000,这个时候我们发现当我们切回正常用户,也就是我们相当于root用户是other用户,并且我们没有任何权限,可以对这个目录做操作,虽然我们不能访问这个目录页不能在在其中创建文件,但是我们却可以做一件事就是我们可以直接把这个目录删除掉,并且我们并没

2017-03-30 13:58:03 2244

原创 Linux中目录文件的权限及其对应的操作

Linux中有个宗旨,就是一切皆文件,那么因为这个所以目录其实对于Linux来说也是一个文件;既然是一个文件,那个访问这个文件也就要有相应的权限,今天就来测试一下这个权限; 首先我们假如要显示一个目录文件的话, 虽然我们创建了这个目录,但是当我们把目录文件的权限修改只有r权限时,我们可以看到这个目录,但是当我们想要进入这个目录的时候的,就会发现权限不允许的情况; 当我们将其

2017-03-23 19:10:03 658

原创 c++模板类顺序表Vector

模板类顺序表这次在顺序表之后,又再次学习了模板,于是便想着将模板类的顺序表实现出来,因为前段时间时间电脑出了些问题,很是悲伤,所以前面的就不补了,反正只要能看懂模板类的,再懂模板中的推理和实例化,这样应该都不是问题。下面就上代码:#pragma once#include #include #include using namespace std;template cl

2017-02-20 15:45:40 869

原创 c++ 虚继承

在c++里面有很大一个重点就是继承和多态了,今天就先说一下关于继承的一个小方面。因为在c++当中的话继承有 1.单继承:一个子类只有一个直接父类时称为这个继承关系为单继承 2.多继承:一个子类有两个或以上的父类时称这个继承关系为多继承例如:单继承class AA{public: int _aa;};class BB :public AA{public: int _bb;

2017-02-15 23:27:06 393

原创 c语言中编译链接的整个过程

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。      编译          编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代

2016-10-19 13:33:34 2977

ADB工具集合,直接下载就可以用,不用安装

ADB工具集合,下载就能用,省的各处找

2023-06-25

租房网,在线租房系统,内含启服教程和数据库sql文件,使用spring+jsp书写

使用spring+jsp书写得一个在线租房系统,数据库为mysql,里面包含有具体的启服导入教程和数据库得sql文件,直接一键导入即可运行

2019-05-04

Unity 5.x 从入门到精通.pdf(2)

Unity 5.x 从入门到精通(分包2,1压缩包在上边,抱歉)

2018-02-01

Unity 5.x 从入门到精通.pdf

Unity 5.x 从入门到精通(因为太大所以分两个包上传,抱歉)

2018-02-01

高质量C/C++编程

高质量C/C++编程下载 本书第一章至第六章主要论述 C++/C 编程风格。难度不高,但是细节比较多。别小 看了,提高质量就是要从这些点点滴滴做起。世上不存在最好的编程风格,一切因需求 而定。团队开发讲究风格一致,如果制定了大家认可的编程风格,那么所有组员都要遵 守。如果读者觉得本书的编程风格比较合你的工作,那么就采用它,不要只看不做。人 在小时候说话发音不准,写字潦草,如果不改正,总有后悔的时候。编程也是同样道理。 第七章至第十一章是专题论述,技术难度比较高,看书时要积极思考。特别是第七 章“内存管理”,读了并不表示懂了,懂了并不表示就能正确使用。有一位同事看了第 七章后觉得“野指针”写得不错,与我切磋了一把。可是过了两周,他告诉我,他忙了 两天追查出一个 Bug,想不到又是“野指针”出问题,只好重读第七章。

2017-09-04

空空如也

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

TA关注的人

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