自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

转载 大型网站技术架构演变过程

前言我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理阶段一、单机构建网站网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/ser

2017-04-28 14:15:56 868

原创 网络编程----libevent改造Echo服务器

前文已经介绍了epoll这IO模型,能够处理数百万的并发量,但是epoll只适用于Linux平台,如果想要编写高并发可移植的网络应用程序我们该怎么办呢?答案是用开源的跨平台高性能的网络库Libevent..libevent 是一个高性能轻量级的跨平台网络库,事件驱动,适用于多个平台,Linux,Windows,Mac os等,支持多种网络IO复用,如常用的select,epoll,pll,de

2017-04-09 17:05:18 702

原创 网络编程---IO复用之epoll模型

前文已经介绍了IO复用的select模型,并列举了在并发数量比较大的时候select的缺点,本文将介绍另外一种IO模型,epoll模型,该模型能够高效解决数百万计的并发量,因此在大规模的网络编程中应用很广,在大规模网络编程中Linux中选择epoll,windows下选择IOCP。epoll的相关系统调用只有三个,使用上比较简单,但是要想能够很好的使用epoll需要如何了解epoll各种模式比

2017-04-09 12:25:03 812

原创 网络编程----IO复用之select模型

前一篇文章提到了,多线程/多进程虽然能够在一定程度上解决并发,但是由于进程/线程的切换消耗系统资源,多余并发量比较大的服务无法支持,因此为了解决大并发场景,需要一种能够支持更多并发的方法----IO复用, 与多线程/进程相比,IO复用最大的优点是避免了线程进程切换时产生的系统开销,内核不用创建线程也不用再维护这些线程了,这样就避免了很多不必要的开销。本文介绍一种IO复用模型,select模型,

2017-04-06 22:35:03 3142 1

原创 网络编程三---多线程/进程解决并发问题

前文列出的代码给大家展示了一个最简单的网络程序,但正如文章末尾所提的,这个最简单的网络程序最大的缺点是服务端一次只能服务一个客户端,就比如说你去吃饭,饭店只有一个服务员, 而且服务员在客户离开之前只能为一个客户服务,也就是说你只能等待你前面的客户吃好饭离开了,然后你才能进去吃饭,而在你吃饭的时候时候,你后面来的人都得等你吃完饭才能轮到你后面一个人吃饭。这种模式的缺点很明显,因为在你进去点好菜到买单

2017-03-30 00:08:11 4589 1

原创 网络编程系列二--最简单的网络程序

这篇文章介绍一个最简单的网络程序,C/S模式,一个服务端进程只能为一个客户端进程服务。最早的计算机是为了应用大规模的计算而研发的,随着http协议以及网络技术的发展,网络通信在计算机的普及中起了非常大的作用,下面就列出了一个最简单的ECHO服务器的程序。#include #include #include #include #include #include int main()

2017-03-26 12:45:47 1209

原创 网络编程系列一网络编程中的基本概念

序言本次文章是一个序列,是对工作以及学习中关于网络编程的一个总结,本序列将从一个最简单的网络程序开始介绍当前网络编程的递进过程,有兴趣的朋友可以去阅读关于C10K问题的文档。在开始代码介绍之前,本文先介绍一些基本的网络编程的基本概念本文不会对网络编程中的一些函数作介绍,如socket(),accpet()等。相信有兴趣浏览该文章的朋友应该对这些函数的使用已经有了基本的了解,要是不了解的话可以自

2017-03-25 22:41:18 505

原创 C++11新特性之std::function & std::bind

std::function 在c++98&03时我们通常使用回调函数还处理一些需要某种场景下才出发的回调操作,但回调函数有一个限制就是它只能赋值给同类型的函数,对于其他有相同的返回值和相同类型参数的成员函数不能赋值。#include using namespace std;//define a callback functypedef void(*CALL_BACK)(void);

2017-02-06 11:15:37 4641

原创 C++11新特性之基本范围的For循环(range-based-for)

Range-Based-For 熟悉C++98/03的对于for循环就再了解不过了,如果我们要遍历一个数组,那么在C++98/03中的实现方式:int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };for (int i = 0; i < 10; i++) cout 而遍历容器类的For如下: std::vector vec {1,2,3,4

2017-01-07 13:49:35 53171 14

原创 C++11新特性之列表初始化

在我们实际编程中,我们经常会碰到变量初始化的问题,对于不同的变量初始化的手段多种多样,比如说对于一个数组我们可以使用 int arr[] = {1,2,3}的方式初始化,又比如对于一个简单的结构体:struct A{ int x; int y;}a={1,2};这些不同的初始化方法都有各自的适用范围和作用,且对于类来说不能用这种初始化的方法,最主要的是没有一种可以通用的初始化方法适用

2017-01-04 15:11:31 51967 15

原创 C++11之模板别名&函数模板的默认模板参数

模板别名在C++98/03里,我们可以通过typedef 关键字定义一个类型的别名,比如 typedef unsigned int uint_t;在这里我们定义了unsigned int类型的别名和uint_t,在以后需要使用unsigned int的时候我们都可以用uint_t替换,但是uint_t仅仅是作为unsigned int的一个别名,如下的定义是不合法的:typedef uns

2017-01-03 15:27:50 9744 1

原创 C++11新特性之auto&decltype

C++11中引入了auto&decltype关键字实现类型推导,通过这两个字可以方便的获取复杂的类型还可以简化代码,提高编码效率。auto关键字auto类型推导C++98/03中一直就有auto关键字了,只不过在C++98/03中auto关键字用于标识具有自动存储期的局部变量,它的作用并不大,在实际的编码过程中我们基本没有用过auto关键字,比如auto int i = 0;  /

2016-12-29 16:39:23 4202

转载 C1000K,构建百万并发级服务器

著名的 C10K 问题提出的时候, 正是 2001 年, 到如今 12 年后的 2013 年, C10K 已经不是问题了, 任何一个普通的程序员, 都能利用手边的语言和库, 轻松地写出 C10K 的服务器. 这既得益于软件的进步, 也得益于硬件性能的提高.现在, 该是考虑 C1000K, 也就是百万连接的问题的时候了. 像 Twitter, weibo, Facebook 这些网站, 它们

2016-12-08 13:55:06 3992

原创 TeamTalk DB_PROXY_SERVER详解

DB_PROXY_Server数据库代理是TeamTalk TTServer中负责与数据库交互的代理服务器,在DB server中负责承载TeamTalk所有业务层面和逻辑层面的数据入库和持久化等服务,是TT_Server中比较重要的一环,在设计中采用了很多实用的技术,比如池化技术,数据库代理,单例模式等,收益匪浅,下面对TealTalk的DB_Server作个详细分析,以封面是自己阅读代码后的学

2016-12-01 10:12:53 3445 1

原创 线程池解析

在阅读TeamTalk的Db_proxy_server中发现Team_Talk的数据代理中用到了线程池的相关技术,也叫数据库连接池,文章总结了线程池的一些基本概念和基本原理,文章末尾列出了一个简单的线程池示例代码。线程池简介在面向对象的编程中,对象的创建和销毁是很费时间的,因为创建和销毁一个对象需要获取内存资源以及其他一些相关的资源,所以提高服务程序的一个有效手段是尽量减少对象的创建和销毁

2016-11-10 14:59:24 516

转载 epoll详解

本文转自:http://blog.csdn.net/xiajun07061225/article/details/9250579什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux ke

2016-11-08 20:59:50 320

转载 C++11新特性

C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百科不是知道是台湾还是香港人翻译的然后由工具转换成简体中文的,有些术语和语言习惯和大陆程序不一样! 我决定结合这两个版本按照我自己的习惯把这篇文章整理到我的博客中.分享给关注我和关注C++11的朋友

2016-10-19 17:38:11 548

原创 TeamTalk--MsgServer启动流程分析

本文主要分析TeamTalk的服务器架构中MsgServer的启动流程,在TeamTalk的各个服务器中,消息服务器Msg-Server是最复杂。本文剖析了其启动流程。1、在Msg_server.cpp的main函数是消息服务器启动的入口函数,其主要的流程包含一下几个部分:(1)、读取配置文件中设置的各个服务器的监听IP和端口。(2)、初始化网络库(3)、消息服务器在监听端口监听

2016-10-13 10:18:30 2738

原创 设计模式之单例模式(singleton)C++

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。在日常编程中,经常会有要求一个类智能有一个实例,比如说WINDOWS编程中,只需创建一个窗口,虽然可以通过全局变量使得只有一个对象可以被访问,但你不能防止类被实例化,一个更好的办法是让类自身保存它的唯一实例,保证没有其他实例可以被创建,并提供一个访问该唯一实例的方法。这就是单例模式。单例模式的组成

2016-10-09 16:52:12 1099

原创 心跳保活---TeamTalk心跳保活机制分析

由于蘑菇街的TeamServer包含了login_server ,msg_server等几个不同的服务端,本文会逐步进行分析,并持续更新。。。。。首先分析为什么需要应用层的心跳机制对应IM使用TCP协议还是UDP协议还是个有争议的话题,仁者见仁智者见智,不过个人觉得这得看实际应用场景,根据应用场景的不同用不同的协议。在TCP协议实现的IM中,需要考虑一个很重要的问题就是心跳保活,那么什么是

2016-09-22 14:33:35 5071

原创 方便的读取配置项类

本文的目的是分享一个好用的,可用于大型项目中读取配置项的类ConfigFileReader,包含了一系列的读写配置项,加载配置项文件等相关操作,可直接拿来使用。需要的人拿走。具体代码如下,贴在这里方便阅读,源代码可以到我的github上获取https://github.com/hailong0715/CodeSegment.git/*CConfigFileReader 类用于读取配置文件中

2016-09-20 17:00:53 387

转载 新版TeamTalk部署教程

本文转自蓝狐的个人博客,仅供学习http://www.bluefoxah.org/teamtalk/new_tt_deploy.html新版TeamTalk部署教程新版TeamTalk已经在2015年03月28日发布了,目前版本定为1.0.0版本,后续版本号会按照如下规则进行:1、版本规则按照x.y.z的形式进行。2、各端小bug修复则版本号中z增加。3、有新的feat

2016-09-11 10:01:36 1475

转载 Linux内核分析--内存管理等

本文转自http://blog.csdn.net/yusiguyuan/article/details/23554927#t2linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别linux内存管理---物理地址、线性地址、虚拟地址、逻辑地址之间的转换上述两篇文章介绍了内存寻址的方式linux内存管理--Linux中的物理和虚拟存储空间布局讲述了物理和

2016-08-19 14:33:40 270

原创 设计模式之备忘录模式(C++实现)

备忘录模式:备忘录模式的UML类图:备忘录模式的实现Demo:Memento.h#include class Memento;class GameRole{private: int m_blood; int m_enery;public: GameRole(int blood = 100, int energy = 100

2016-08-18 17:23:50 421

原创 ProtoBuf安装和使用简介

在前一篇文章中,对ProtoBuf做了一个基本介绍,这篇文章主要介绍ProtoBuf的安装和使用。ProtoBuf的安装安装ProtoBuf前需要先安装ProtoBuf的编译器和运行时环境。对于C++使用者:由于ProtoBuf是用C++写的,因此你可以获取ProtoBuf的源码自己编译,而对于其他语言来说可以直接使用ProtoBuf已经编译好的Release版本直接进行安装和使用,相

2016-07-28 18:58:03 40730

原创 设计模式之适配器模式(Adapter)C++实现

适配器模式:是将一个类的接口转换成客户想希望的另外一个接口。Adapter模式使得原本由于接口不兼容的而不能一起工作的那些类可以一起工作。简单的来说是配置是解决主要一类问题:我们需要的东西就在面前,但是却不能用,短时间又无法改造它,于是我们就想办法适配它。比如说我们购买笔记本等电子产品时,经常会带一个电源适配器,这是因为我们家用点的电压是220V的,而一般的笔记本工作电压在16V到22V之间,

2016-07-26 15:42:25 498

原创 蘑菇街TeamTalk源码流程思维导图

最近对蘑菇街的TeamTalk源码比较感兴趣,因此抽了部分时间去学习它的源码,获益匪浅,该篇文章列出了TeamTalk Login_Server的处理流程的思维导图,希望帮助大家阅读Login_Server的代码时有个宏观的了解。

2016-07-26 10:21:09 3132

原创 设计模式之状态STATE模式(C++)

状态模式:属于行为型模式的其中一种,其允许一个对象在内部改变状态时改变它的行为,对象看起来似乎修改了它的类。状态模式主要解决的是当控制一个对象的状态转换条件表达式过于复杂时的情况,把状态的逻辑判断转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。好处就是讲于特定状态相关的行为局部化,并且将不同的状态行为分割开来。比如说我们有一个DoSomeThing的函数,该函数内有大量的if els

2016-07-22 14:46:18 3079 2

转载 Linux makefile 教程,简单粗暴,2小时学习makefile

本文转自:http://blog.csdn.net/liang13664759/article/details/1771246   最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。            于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。           后

2016-07-20 15:10:11 4043 2

原创 设计模式之观察者模式(C++)

观察者模式(Observer):定义了对象间的一种一对多的关系,当一个对象改变时,所有依赖他的对象都得到通知并自动更新。动机:将一个系统划分成一系列相互协作的类有一个常用的副作用:需要维护相关对象间的一致性,我们不希望为了维护一致而是的各类紧密耦合,因为主要降低了系统的可复用性,因此利用观察者模式可以描述建立一种各层次之间的关系的模型,当被依赖的某个对象的状态发生变更时,所有依赖的对象的状

2016-07-19 15:21:16 368

原创 JsonCpp使用细谈(Windows平台)

JSON:(JavaScript Object Notation)是基于Javascript的一种轻量级的数据交换格式,易于读写同时也易于机器解析和生成。具体详细有关Json的信息可参考JSON官网:http://www.json.org。Json也是一种跨平台多语音的数据交换格式,本文仅说明Windows平台下的Json使用介绍。Json的数据文本类似于一个MAP,数据存储中key/va

2016-07-18 16:37:48 4865

转载 我读过的最好的epoll讲解

本文转自:http://my.oschina.net/dclink/blog/287198首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。    不管是文件,还是套接字,还是管道,我们都可以把他们看作流。    之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们

2016-07-16 16:49:56 364

原创 设计模式之外观模式(Facade)C++

外观模式:为客户端提供一套统一的接口,处理客户端请求,使客户端和具体的功能类分离开来,具体功能类的修改不影响客户端。定义了一个高层接口,使得子系统更容易使用。动机:将一个系统划分成若干的子系统有利于降低系统的复杂性,一个常见的设计目标是使得各个子系统的通信和相互依赖关系达到最小,达到该目标的途径之一就是引入外观模式,利用外观模式为各个子系统提供一个统一一致的简单界面。外观模式的通用UM

2016-07-15 15:10:18 860

原创 设计模式之模板方法模式(C++)

模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了一个很好的代码复用解决方案。通用模板方法的UML类图模板方法是将原来不变的行为和可变的行为剥离开,将不变的行为剥离到基类中,由基类提供一个模板方法,模板方法设置了算法的骨架,而各家

2016-07-12 15:05:39 2277

原创 设计模式之原型模式(C++)

原型模式:属于对象创建型模式的一种,用于根据原型实例创建指定类型的对象,并且通过拷贝这些原型来创建新的对象。适用性:当一个系统需要独立于它的产品创建、构成和表示时,要使用ProtoType模式;以及当要实例化的类是在运行时指定,如通过动态加载或者为了避免创建一个与产品层次平行的工厂类层次时;或者当一个类的示例只能有几个不同的状态组合中的一组时建立相应的原型克隆核能比每次用合适的状态

2016-07-11 17:14:46 439

原创 设计模式之代理模式(C++)

代理模式:为其他对象提供一种代理以控制对这个对象的访问。对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化,比如在一个文档编辑器中插入一个图片,有些图片的创建的开销很大,但是又要求打开文档速度要求很快,因此在打开文档时应该避免创建开销大的对象,因为并非打开文档时文档中的所有资源都必须可见,所以没必要一次性同时创建所有对象而应该在需要显示对应的资源也就是需要

2016-06-30 16:10:31 350

原创 设计模式之装饰器模式(C++)

装饰器模式(DECRATOR):为了实现动态的给对象添加职能,即从外部给对象添加相关职能。可以这样理解,比如说一个Person类,该类的操作有能吃、能睡、能跑、但假如随着人类的进化,某一天Person能飞了,能在水里游了等等,按照一般的写法是修改Person这个类,给这个类添加上能飞,能游等操作,但是这样破坏了面向对象的开放-封闭原则(对修改封闭,对拓展开发,有兴趣的可以查看相关文献),且随着人类

2016-06-24 11:39:21 6786 4

原创 设计模式之建造者模式(C++实现)

#ifndef PRODUCT_H_#define PRODUCT_H_#include class Product{public: void SetPartA(std::string str){ partA = str; } void SetPartB(std::string str){ partB = str; }; void SetPartC(std::string st

2016-06-17 15:35:35 257

原创 设计模式之抽象工厂

抽象工厂(AbstractFactory)提供一个创建一系列相关或者相互依赖对象的接口,而无需指定 它们具体的类。适用性:一个系统要独立于它的产品创建、组合和表示。一个系统要由多个产品系列的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示他们的接口而不是实现时。抽象工厂结构:抽象工厂的划分

2016-06-01 15:42:54 349

原创 std::pair<MAP::iterator,bool>用法,可用来判断插入式否成功

最近在工作中遇到MAP和PAIR的新用法,将Map.Insert()方法的返回值放入PAIR中,可通过判断PAIR的成员值来判断插入是否成功。例:std::pair add(map.insert(std::pair(PeerAddressToString()+PwIdToString(),cnt)));声明一个add的PAIR类型的类,调用PAIR的构造函数,参数是Map.insert

2016-05-12 10:02:49 2709 1

空空如也

空空如也

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

TA关注的人

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