自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ICE 超过最大连接数崩溃的问题

最近做ice服务器的压力测试,发现ICE在文件描述符用尽的情况下会崩溃,查看源码发现时connectionFactory中的一段代码:// // Now accept a new connection. // TransceiverPtr transceiver; try { transceiver = _acceptor->accept(); } catch

2016-04-02 22:02:31 3287

原创 Libevent源码分析(七)--- IOCP

IOCP模型关于iocp模型,网上有很多资料,这里不详细分析,下面这篇文章写的就非常详细: 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

2016-04-02 20:00:02 3813

原创 Libevent源码分析(六)--- bufferevent

上一节说过,libevent提供六中bufferevent类型,后面会详细分析其中的两个,bufferevent_sock和bufferevent_async,后者是采用iocp实现的。每一个bufferevent包含两个evbuffer作为读写缓存。下面是bufferevent的详细定义:struct bufferevent { /** Event base for which th

2016-04-01 11:48:23 2542

原创 Libevent源码分析(五)--- evbuffer的基本操作

之前几节分析了libevent底层的结构和运行机制,接下来的几节将会分析Bufferevents,Bufferevents在event的基础上加入了数据缓存逻辑,使得事件和数据结合在一起。libevent的bufferevent有六种类型,分别是:bufferevent_async,bufferevent_filter,bufferevent_openssl,bufferevent_pair,bu

2016-03-29 16:25:58 2273

原创 Libevent源码分析(四)--- libevent事件机制

之前几个章节都是分析libevent的辅助功能,这一节将要详细分析libevent处理事件的流程和机制,在分析之前先看一下libevent的使用方法,本文也将以libevent的使用方式入手来分析libevent的工作机制。void cb_func(evutil_socket_t fd, short what, void *arg){ const char *data = arg;

2016-03-18 20:22:43 1691

原创 Libevent源码分析(三)--- IO多路复用模型

eventop和zeromq一样,libevevnt支持多种 I/O多路复用技术比如epoll、poll、dev/poll、select 和kqueue 等 ,为了统一封装这些模型,libevent定义了eventop结构体:/** Structure to define the backend of a given event_base. */struct eventop {

2016-03-17 12:17:06 1450

原创 Libevent源码分析(二)--- 时间管理

时间获取libevent使用两种方式获取时间,首选是通过clock_gettime的CLOCK_MONOTONIC参数获取绝对时间,这个时间是递增的,不受系统时间影响,比较准确。其次是使用gettimeofday或者_ftime,这两种方式都是获取系统时间,下面是相关代码:static intgettime(struct event_base *base, struct timeval *tp)

2016-03-14 11:10:55 913

原创 Libevent源码分析(一)--- 基本数据结构

event结构体libevent是一个基于事件触发的网络库,它的特色之一是把I/O事件,定时器事件和信号量事件统一处理,对上层用户基本是透明的。在libevent内部这三种事件都用event结构体来表示,event是libevent中最基本的数据结构:struct event { TAILQ_ENTRY(event) ev_active_next; TAILQ_ENTRY(even

2016-03-12 14:04:45 3096

原创 Libevent源码分析(零)--- 前言

libevent是一个基于事件模型的网络库,它以高性能著称,使用也非常广泛,比如熟知的memcache就是使用libevent作为底层网络库的。笔者目前游戏服务器同样使用了libevent作为网关服务器和客户端交互的网络库,而服务器之间的通讯则使用了zeromq。libevent的介绍网上比较多,基本有以下几个特点:事件驱动,高性能 高性能是libevent最重要的特性,后

2016-03-10 14:43:24 751

原创 ZMQ源码分析(九)--其他socket_base模型

zmq除了上篇介绍的四种模型外还提供了很多其他有用的模型,下图说明了zmq提供的所有模型以及他们之间的使用关系: 下面是zmq的一些相关文章: http://rfc.zeromq.org/spec:24/ZMTP-PLAIN defines the ZMTP-PLAIN security mechanism. http://rfc.zeromq.org/spec:25/ZMTP-CURVE d

2016-02-19 19:08:54 1098

原创 ZMQ源码分析(八)--ROUTER-DEALER & REQ-REP

router & dealer 这对模型是zmq最重要的模型,由这对模型也衍生出一些其他模型,比如接下来要说到的req-rep模型。再分析router-dealer之前先看一下zmq的两个队列 : fq和 lb。前者是一个用于接收消息的fair queueing队列,后者是一个用于发送消息的load balance队列。两者都使用了一个array_t来作为自己的队列数据结构,array_t的实现比

2016-02-19 19:03:13 4699

原创 ZMQ源码分析(七) --进程内通讯

之前两节分析了zmq的tcp通讯流程,除了tcp之外,zmq还支持许多其他的通讯模式,比如inproc,ipc,pgm,epgm,tipc等。这一节接着分析inpro,即进程内通讯。和tcp通讯相比,进程内通讯要简单许多,因为不涉及到远程连接的认证以及数据的编码和解码,只是简单的在两个socket_base_t之间连接一个pipe,通过pipe在线程间传递数据即可。inproc通讯也两个套接字分别调

2016-01-29 19:29:21 3259 1

原创 ZMQ源码分析(六)--编码器和解码器

zmq的编码器和解码器负责和stream_engine合作收发网络数据,zmtp3.0使用v2_decoder和v2_encoder进行收发数据,本文也只对该版本进行分析。解码器

2016-01-28 17:17:59 1640

原创 ZMQ源码分析(五) --TCP通讯

zmq支持tcp,inpro,ipc,pgm,epgm,tipc等通讯方式。只要在address中指定地址格式即可透明支持对应的通讯方式。这里我们以最常用的tcp为例分析zmq数据在网络间传输的流程。

2016-01-28 11:21:38 6599

原创 ZMQ源码分析(四)--MSG

MSGmsg类是zmq中消息的定义类,tcp数据传送,进程间数据传送,进程内数据传送都是以msg为基本单位的。由于msg经常需要在对象之间传送,所以如何能尽量避免拷贝是msg需要解决的问题。 class msg_t{public: // Message flags. enum { more = 1, // Followed by mo

2016-01-24 01:08:05 1705

原创 ZMQ源码分析(三)--对象管理和消息机制

对象管理zmq的高效很大一部分原因是因为消息的传递采用无锁的操作,在分析zmq的消息机制之前先来看一下zmq的对象管理机制。在zmq中所有参与消息机制的对象都继承自object_t对象,该对象只有两个变量,一个ctx和一个tid,tid记录了mailbox在ctx中mailbox数组的索引,send_command方法可以通过tid找到对象对应的mailbox以便发送消息。另外object

2016-01-23 23:20:53 2668

原创 ZMQ源码分析(一)-- 基础数据结构的实现

ZMQ

2016-01-23 22:05:22 4471

原创 ZMQ源码分析(二)-- 网络&线程模型

网络&线程模型 zmq封装了select,poll,epoll,queue,kqueue等各个平台上基础的网络模型,但是在windows上没有封装IOCP模型,而是使用select,这对zmq在windows上会造成一些性能影响,毕竟select模型的性能相对较低。虽然这些模型的原理和操作都不相同,但是zmq封装了这些差异,抽象出统一的实现接口,下面我们以linux下的epoll模型为例进行分析,

2016-01-23 22:00:44 3038

转载 InnoDB performance optimization basics (redux)

InnoDB performance optimization basics (redux)September 20, 2013 by Muhammad Irfan 6 CommentsinShareI recently stumbled upon a post that Peter Zaitsev publish

2014-10-15 12:47:45 539

空空如也

空空如也

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

TA关注的人

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