<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yangjinkui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yangjinkui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yangjinkui]]></copyright><item><title><![CDATA[游戏服务器架构发展史（上）]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/79069030</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/79069030</guid><author>yangjinkui</author><pubDate>Mon, 15 Jan 2018 21:31:14 +0800</pubDate><description><![CDATA[《游戏服务端架构发展史》转载请著名出处：http://www.skywind.me/blog/archives/1265  
类型1：卡牌，跑酷等弱交互服务端卡牌跑酷类因为交互弱，玩家和玩家之间不需要实时面对面PK，打一下对方的离线数据，计算下排行榜，买卖下道具即可，所以实现往往使用简单的 HTTP服务器：登录时可以使用非对称加密（RSA, DH），服务器根据客户端uid，当前时间戳还有服务端私钥，]]></description><category></category></item><item><title><![CDATA[游戏架构设计的一些整理]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/77624174</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/77624174</guid><author>yangjinkui</author><pubDate>Sun, 27 Aug 2017 22:40:24 +0800</pubDate><description><![CDATA[一个大型的网落游戏服务器应该包含几个模块：网络通讯，业务逻辑，数据存储，守护监控（不是必须），其中业务逻辑可能根据具体需要，又划分为好几个子模块。这里说的模块可以指一个进程，或者一个线程方式存在，本质上就是一些类的封装。对于服务器的并发性，要么采用单进程多线程，要么采用多进程单线程的方式，说说两种方式的优缺点：一、单进程多线程的服务器设计模式只有一个进程，但一个进程包好多个线程：网络通讯层，业务逻辑]]></description><category></category></item><item><title><![CDATA[C++ 中头文件重复定义的问题]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/77336070</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/77336070</guid><author>yangjinkui</author><pubDate>Thu, 17 Aug 2017 17:00:02 +0800</pubDate><description><![CDATA[一、同一头文件中类嵌套的疑问假设我们有两个类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中又有]]></description><category></category></item><item><title><![CDATA[tcp粘包分析]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76854999</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76854999</guid><author>yangjinkui</author><pubDate>Mon, 07 Aug 2017 17:59:22 +0800</pubDate><description><![CDATA[这两天看csdn有一些关于socket粘包，socket缓冲区设置的问题，发现自己不是很清楚，所以查资料了解记录一下： 一 .两个简单概念长连接与短连接： 
1.长连接Client方与Server方先建立通讯连接，连接建立后不断开， 然后再进行报文发送和接收。2.短连接Client方与Server每进行一次报文收发交易时才进行通讯连接，交易完毕后立即断开连接。此种方式常用于一点对多点  
通讯，比如]]></description><category></category></item><item><title><![CDATA[网络基础]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76687236</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76687236</guid><author>yangjinkui</author><pubDate>Fri, 04 Aug 2017 16:12:45 +0800</pubDate><description><![CDATA[谈到网络，首先就需要知道计算机网络中的两个参考模型，即OSI参考模型与TCP/IP参考模型。 
OSI参考模型 
OSI（Open System Interconnect），即开放式系统互联。 一般都叫OSI参考模型，是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架（物理层、数据链路层、网络层、运输层、会话层、表示层和应用层），即ISO开放系统互联参考模型。在这一框]]></description><category></category></item><item><title><![CDATA[单例模式之 懒汉和饿汉模式]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76633874</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76633874</guid><author>yangjinkui</author><pubDate>Thu, 03 Aug 2017 16:15:17 +0800</pubDate><description><![CDATA[1.懒汉模式
2.饿汉模式
单例模式是设计模式中比较简单的一种。适合于一个类只有一个实例的情况，比如窗口管理器，打印缓冲池和文件系统，它们都是原型的例子。典型的情况是，那些对象的类型被遍及一个软件系统的不同对象访问，因此需要一个全局的访问指针，这便是众所周知的单例模式的应用。单例模式要保证的就是全局只有一个对象存在；所以很容易就能想到把构造析构定义为protected或者private，这样类外无法]]></description><category></category></item><item><title><![CDATA[Memory barrier（内存屏障）]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76622633</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76622633</guid><author>yangjinkui</author><pubDate>Thu, 03 Aug 2017 15:22:20 +0800</pubDate><description><![CDATA[理解 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.]]></description><category></category></item><item><title><![CDATA[C语言模拟实现C++的继承与多态]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76615061</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76615061</guid><author>yangjinkui</author><pubDate>Thu, 03 Aug 2017 11:16:18 +0800</pubDate><description><![CDATA[一、面向过程编程与面向对象编程的区别  
众所周知，C语言是一种典型的面向过程编程语言，而C++确实在它的基础上改进的一款面向对象编程语言，那么，面向过程与面向对象到底有什么样的区别呢？【从设计方法角度看】  
面向过程程序设计方法采用函数（或过程）来描述对数据的操作，但又将函数与其操作的数据分离开来。  
面向对象程序设计方法是将数据和对象的操作封装在一起，作为一个整体来处理。【从维护角度看】]]></description><category></category></item><item><title><![CDATA[堆和栈的区别（转过无数次的文章）]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76391004</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76391004</guid><author>yangjinkui</author><pubDate>Sun, 30 Jul 2017 16:22:26 +0800</pubDate><description><![CDATA[一、预备知识—程序的内存分配 
  一个由C/C++编译的程序占用的内存分为以下几个部分 
  1、栈区（stack）—   由编译器自动分配释放   ，存放函数的参数值，局部变量的值等。其 
  操作方式类似于数据结构中的栈。 
  2、堆区（heap）   —   一般由程序员分配释放，   若程序员不释放，程序结束时可能由OS回 
  收   。注意它与数据结构中的堆是两回事，分配方式倒是类似]]></description><category></category></item><item><title><![CDATA[C++中的隐藏、重载、覆盖（重写）]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76242133</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76242133</guid><author>yangjinkui</author><pubDate>Fri, 28 Jul 2017 11:48:17 +0800</pubDate><description><![CDATA[1 重载与覆盖成员函数被重载的特征：（1）相同的范围（在同一个类中）；（2）函数名字相同；（3）参数不同；（4）virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数，特征是：（1）不同的范围（分别位于派生类与基类）；（2）函数名字相同；（3）参数相同；（4）基类函数必须有virtual关键字。令人迷惑的隐藏规则 
本来仅仅区别重载与覆盖并不算困难，但是C++的隐藏规则使问题复杂性陡然增加。]]></description><category></category></item><item><title><![CDATA[静态成员和静态成员函数]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/76021555</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/76021555</guid><author>yangjinkui</author><pubDate>Mon, 24 Jul 2017 15:52:50 +0800</pubDate><description><![CDATA[一、静态成员的特点：（1）static数据成员在类的内部声明，但只能在类的外部定义，在类的外部不能指定static，在类的定义时候进行初始化; 
（2）static数据成员只能在类的外部进行初始化（特例：当整型const static数据成员被常量表达式初始化时，就可以在类的内部进行初始化，但还需要在外部进行定义）。 
（3） static数据成员可以是该成员所属的类类型，而非static数据成员只]]></description><category></category></item><item><title><![CDATA[Linux下的eval以及和$()，``]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/75274875</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/75274875</guid><author>yangjinkui</author><pubDate>Tue, 18 Jul 2017 10:19:56 +0800</pubDate><description><![CDATA[假设cmd=” echo 33” 
eval $cmd 等价于 “echo 33 ” 
其实相当是先让后边的变量先执行，再执行其结果； 
同时这些需要进行两次扫描的变量有时候被称为复杂变量。同时在shell脚本中还有等价的两条命令“ ，$() 都是做命令替换的，和上面变量替换差不多；都是用来重组命令行的，先完成引号里的命令行，然后将其结果替换出来，再重组成新的命令行。$( )与｀｀ 
在操作上，这两]]></description><category></category></item><item><title><![CDATA[HTTP协议详解（真的真的很经典）]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/74276763</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/74276763</guid><author>yangjinkui</author><pubDate>Mon, 03 Jul 2017 22:24:00 +0800</pubDate><description><![CDATA[HTTP是一个属于应用层的面向对象的协议，由于其简捷、快速的方式，适用于分布式超媒体信息系统。它于1990年提出，经过几年的使用与发展，得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版，HTTP/1.1的规范化工作正在进行之中，而且HTTP-NG(Next Generation of HTTP)的建议已经提出。]]></description><category></category></item><item><title><![CDATA[正则表达式详解]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/74276635</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/74276635</guid><author>yangjinkui</author><pubDate>Mon, 03 Jul 2017 22:10:32 +0800</pubDate><description><![CDATA[正则表达式关于正则表达式的来源和历史有感兴趣的小伙伴直接看百度百科就好；正则表达式你可以理解它是用事先规定好的一些符号，及一些特定组合来组成一个“规则字符串”，这个“规则字符串”用来表达对字符串的一种过滤逻辑”，来过滤你想要找出的字符串；而其强大之处在于，这个规则是通用的，不管你在哪个版本，哪里，只要是支持正则表达式，他就是这个规则，所以还是有必要记一记的；下面就来说一说这些事先定好的规则，主要分为]]></description><category></category></item><item><title><![CDATA[线程死锁]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/74139780</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/74139780</guid><author>yangjinkui</author><pubDate>Sun, 02 Jul 2017 17:31:47 +0800</pubDate><description><![CDATA[死锁 
是指两个或两个以上的进程在执行过程中，由于竞争资源或者由于彼此通信而造成的一种阻塞的现象，若无外力作用，它们都将无法推进下去；死锁产生的四个必要条件： 
1）互斥条件：指进程对所分配到的资源进行排它性使用，即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源，则请求者只能等待，直至占有资源的进程用毕释放。 
2）请求和保持条件：指进程已经保持至少一个资源，但又提出了新的资源请求]]></description><category></category></item><item><title><![CDATA[线程安全与可重入函数]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/74138363</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/74138363</guid><author>yangjinkui</author><pubDate>Sun, 02 Jul 2017 17:15:13 +0800</pubDate><description><![CDATA[线程安全就是多线程访问时，采用了加锁机制，当一个线程访问该类的某个数据时，进行保护，其他线程不能进行访问直到该线程读取完，其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护，有可能出现多个线程先后更改数据造成所得到的数据是脏数据; 
如果你的代码所在的进程中有多个线程在同时运行，而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的，而且其他的]]></description><category></category></item><item><title><![CDATA[CRC校验]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/73753464</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/73753464</guid><author>yangjinkui</author><pubDate>Mon, 26 Jun 2017 23:11:59 +0800</pubDate><description><![CDATA[CRC即循环冗余校验码（Cyclic Redundancy Check）：是数据通信领域中最常用的一种查错校验码，其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查（CRC）是一种数据传输检错功能，对数据进行多项式计算，并将得到的结果附在帧的后面，接收设备也执行类似的算法，以保证数据传输的正确性和完整性。其根本思想就是先在要发送的帧后面附加一个数（这个就是用来校验的校验码，但要注意，这里的数]]></description><category></category></item><item><title><![CDATA[NAT技术和代理服务器]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/73730750</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/73730750</guid><author>yangjinkui</author><pubDate>Sun, 25 Jun 2017 23:37:19 +0800</pubDate><description><![CDATA[NAT技术是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址（即仅在本专用网内使用的专用地址），但现在又想和因特网上的主机通信（并不需要加密）时，可使用NAT技术； 
NAT的实现方式有三种，即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。静态转换是指将内部网络的私有IP地址转换为公有IP地址，IP地址对是一对一的，是一成不变的，某]]></description><category></category></item><item><title><![CDATA[路由选择协议]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/73730488</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/73730488</guid><author>yangjinkui</author><pubDate>Sun, 25 Jun 2017 22:48:49 +0800</pubDate><description><![CDATA[先说一下理想的路由算法：
算法必须是正确的和完整的   “正确”的含义是：沿着各路由表所指引的路由，分组一定能够最终到达目的网络和主机；
算法在计算上应简单    路由选择的计算不应该使网络通信量增加太多的额外开销；
算法应能适应通信量和网络拓扑的变化   这就是说要有自适应性。当网络中的通信量发生变化时，算法能自适应改变路由以均衡各链路的负载；当某个或某些结点、链路发生故障不能工作，或者修理好了再]]></description><category></category></item><item><title><![CDATA[软件端口]]></title><link>https://blog.youkuaiyun.com/yangjinkui/article/details/73695226</link><guid>https://blog.youkuaiyun.com/yangjinkui/article/details/73695226</guid><author>yangjinkui</author><pubDate>Sat, 24 Jun 2017 22:11:44 +0800</pubDate><description><![CDATA[软件端口是应用层的各种协议进程与运输实体之间进行层间交互的一种地址；端口号只具有本地意义，它只是为了标志本计算机应用层中的各个进程在和运输层交互的层间接口，它是用16位来标志的，所以最多有65535个不同的端口；其主要分为两大类：
服务器使用的端口号 
这里又分为两类，最重要的一类叫做熟知端口号或系统端口号，数值为0~1023；这些数值可在网址www.iana.org上查到；IANA 把这些端口号指]]></description><category></category></item></channel></rss>