
高性能网络通信框架
文章平均质量分 55
kgduu
这个作者很懒,什么都没留下…
展开
-
asio的学习笔记
1、asio中的service_registry是在io_service.ipp中注册的,注册也是只有可能时task_io_service和win_iocp_io_service两种。还有注意的是,task_io_service和win_iocp_io_service是直接继承boost::asio::detail::service_base的,所以是有id的。而reactive_socket_s原创 2016-09-08 22:37:48 · 1127 阅读 · 0 评论 -
asio中的socket相关service的关系图
原创 2016-01-05 19:13:33 · 651 阅读 · 0 评论 -
boost asio 应用方法学(二)——深入框架
要用好它,就必须先了解它,而且不能停止于表面,必须深入到内部。而了解一件事物,先要了解它的框架,再了解它的细节。了解了框架,我们就有了提纲挈领的认识。关于 boost asio 框架结构,在其文档中,用了这样一张图来描述: 简单解释一下:这里由使用者(Initiator)启动一个异步操作(Asynchronous Operation),在启动异步的同时它要负转载 2015-11-05 13:01:34 · 646 阅读 · 0 评论 -
asio中奇怪的代码
在asio/detail/impl/task_io_service.ipp文件中的函数do_run_one中,在处理task_operation时,定义了一个临时变量task_cleanup on_exit这个变量有析构函数,它的作用域结束后,重新将task_operation加入到操作队列中。但是在定义完之后,用(void)on_exit原来是为了避免编译器给warning,说on_exit原创 2015-05-27 00:12:51 · 691 阅读 · 0 评论 -
libevent中的bufferevent
bufferevent是libevent中处理网络事件很重要也是比较复杂的一个模块,其中包含一个读事件,一个写事件,两个缓冲区(读和写)、读写水位、三个回调(读、写、出错)和函数指针组成的操作集。目前支持的操作集有五种:基于socket的,基于pair的,基于过滤的及基于SSL,异步(WIN32 iocp)的五种。bufferevent的结构为struct bufferevent { /**原创 2015-05-14 22:04:40 · 1457 阅读 · 0 评论 -
libevent中的缓冲区(二)
1. 缓冲区的chunk的分配 在分配chunk时,其实chunk头包含一些附加信息,如chunk块存放数据的空间大小(buffer_len),起始地址(buffer),当前数据尾到起始片的偏移(off)等。chunk的大小算上头部信息,至少是1024个字节。 “` static struct evbuffer_chain * evbuffer_chain_new(size_t size原创 2015-05-11 21:44:47 · 2872 阅读 · 0 评论 -
libevent中的缓冲区(一)
libevent中的缓冲区定义为evbuffer,主要在文件evbuffer-internal.h文件中,定义如下struct evbuffer { /** The first chain in this buffer's linked list of chains. */ struct evbuffer_chain *first; //缓冲区中的第一原创 2015-05-10 15:38:13 · 2406 阅读 · 0 评论 -
libevent中的基本数据结构
libevent中文件queue.c文件包含5种数据结构:单链表,双向链表,队列,尾队列,环形队列。在处理I/O和signal中的事件时,用的就是尾队列,下面就介绍这几种数据结构1、单链表链表头用宏SLIT_HEAD来定义#define SLIST_HEAD(name, type) \struct name { \ struct原创 2015-05-05 22:36:50 · 1386 阅读 · 0 评论 -
libevent中事件的添加与删除
前面介绍了libevent中的hash表,在添加事件时,具体是如何操作的呢?事件操作主要是在evmap.c文件中,包含了io事件,signal事件的操作。在事件操作时,分两种情况,一种是利用hash表,另外一种是不用hash表。1、hash表hash表结构主要是针对io事件时,通过两个宏定义了hash表,及hash表相关的操作HT_PROTOTYPE(eve原创 2015-05-04 21:55:26 · 3293 阅读 · 0 评论 -
libevent在windows下使用步骤详解
libevent是一个常用的网络库,下面就看看在windows下面编译测试的过程吧。一 环境系统:win8.1编译器:VS2013官方下载地址:http://libevent.org/版本:2.0.22-stable二 编译静态库1 解压把上面下载到libevent-2.0.22-stable.tar.gz解压,得到libevent-2.0.22-s原创 2015-05-02 23:28:25 · 2091 阅读 · 0 评论 -
libevent中的信号处理
libevent中将信号集成到event_base_loop事件循环中,通过socketpair转换成I/O事件,本文主要介绍相关的转换。1、将信号转成I/O采用socket pair方式,一个socket对,一个用于写,一个用于读,具体工作方式如下linux环境下直接使用socketpair就可以,而在不支持socketpair情况就需原创 2015-05-02 00:18:30 · 2775 阅读 · 0 评论 -
libevent中的时间及相关的管理
libevent中的时间及相关的管理在介绍时间之前,先说明几个与时间相关的函数及其用法1、基础1.1 clock_gettime(精度比较高,ns级)#include int clock_gettime(clockid_t clk_id, struct timespec *tp);clk_id:检索和设置的clk_id指定的时钟时间CLOCK_REALTIM原创 2015-04-29 23:27:12 · 1347 阅读 · 0 评论 -
libevent中的hash表
libevent中的hash表的代码在ht-internal文件中,在添加io事件,signal事件时,底层是在操作event_io_map和event_signal_map1、 hash的结构(开链)libevent中的hash表是用宏来定义的#define HT_HEAD(name, type)原创 2015-04-27 22:08:06 · 937 阅读 · 0 评论 -
linux网络服务器框架转载
思考一种高性能的服务器处理框架1、首先需要一个内存池,目的在于:·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题;·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度;·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于容器而言,处理固定块的分配和回收,相当容易实现。当然,还要记得需要设计成线程安全的,自旋锁比转载 2014-12-25 19:37:20 · 893 阅读 · 0 评论 -
HSHA多线程网络编程模型介绍
我在上一篇的分享《Leader/Follower多线程网络模型介绍》中详细介绍了LF多线程网络模型的原理和代码分析。它的思路是减少线程上下文切换和数据拷贝时间,通过角色转换,来提高处理效率,尤其适用于处理短暂的、原子的并且反复的动作中的事件。可能大家都比较熟悉这种常用的思路了,那就是分层。它的核心思想:通过把异步和同步分开,用异步的方式来处理底层网络问题,用同步的方式来简化应用服务流程,通转载 2015-02-09 19:20:49 · 800 阅读 · 0 评论 -
Leader/Follower多线程网络模型介绍
之前分享过《轻量级web server Tornado代码分析》,介绍了目前我们采用nginx + tornado的方式搭建升级、配管、数据中心等各类服务组建客户端迭代体系。最近注意到,淘宝目前公开了其网络服务器源代码Tengine。根据官方介绍,Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和转载 2015-02-09 19:09:40 · 780 阅读 · 0 评论 -
The C10k problem —— 高性能服务器开发必读
The C10k problem转载 2015-01-20 13:53:51 · 1108 阅读 · 0 评论 -
经典的”服务器最多65536个连接”误解
"因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接." - 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.要戳破这个错误结论, 可以从理论和实践两方面来.理论系统通过一个四元组来唯一标识一条TCP连接. 这个四元组的结构是{local ip, local port, remote转载 2015-02-01 18:56:33 · 5232 阅读 · 1 评论 -
C1000k 新思路:用户态 TCP/IP 协议栈
转自:http://blog.youkuaiyun.com/solstice/article/details/26363901C1000k 新思路:用户态 TCP/IP 协议栈现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M)。实现 C1000k 的常规做法是调整内核参数,提高文件转载 2015-02-01 18:49:24 · 1100 阅读 · 0 评论