Libevent(5)— 连接监听器

2013 年 01 月 07 日 by name5566 Categories: Computer Science, Concurrency, Network, Server Dev

参考文献列表:
http://www.wangafu.net/~nickm/libevent-book/

此文编写的时候,使用到的 Libevent 为 2.0.21

Libevent 提供了连接监听器 evconnlistener

创建 evconnlistener 实例

// 连接监听器回调函数原型
typedef void (*evconnlistener_cb)(
    struct evconnlistener *listener,
    // 新的 socket
    evutil_socket_t sock,
    // 新的 socket 对应的地址
    s[......]

继续阅读

没有评论

Libevent(4)— Bufferevent

 by name5566 Categories: Computer Science, Concurrency, Network, Server Dev

参考文献列表:
http://www.wangafu.net/~nickm/libevent-book/

此文编写的时候,使用到的 Libevent 为 2.0.21

Buffer IO 模式

bufferevent 提供给我们一种 Buffer IO 模式(这里以写入数据为例):

  1. 在我们需要通过某个连接发送数据的时候,先将等待发送的数据放入到一个 buffer 中
  2. 等待此连接可以写入数据
  3. 尽可能多的获取 buffer 中的数据写入此连接
  4. 如果 buffer 中还有需要写入的数据则继续等待直到此连接可以写入数据

每一个 bufferevent 都包含了一个输入 buffer[......]

继续阅读

没有评论

Libevent(3)— 基础库

2012 年 12 月 28 日 by name5566 Categories: Computer Science, Concurrency, Network, Server Dev

参考文献列表:
http://www.wangafu.net/~nickm/libevent-book/

此文编写的时候,使用到的 Libevent 为 2.0.21

常用基本数据类型

  1. evutil_socket_t 用于保存 socket
  2. ev_uint64_t 取值范围 [0, EV_UINT64_MAX]
  3. ev_int64_t 取值范围 [EV_INT64_MIN, EV_INT64_MAX]
  4. ev_uint32_t 取值范围 [0, EV_UINT32_MAX]
  5. ev_int32_t 取值范围 [EV_INT32_MIN, EV_INT32_MAX[......]

继续阅读

没有评论

Libevent(2)— event、event_base

 by name5566 Categories: Computer Science, Concurrency, Network, Server Dev

参考文献列表:
http://www.wangafu.net/~nickm/libevent-book/

此文编写的时候,使用到的 Libevent 为 2.0.21。本文略过了关于 event 优先权和超时相关的讨论。

创建和销毁 event_base

event_base 是首先需要被创建出来的对象。event_base 结构持有了一个 event 集合。如果 event_base 被设置了使用锁,那么它在多个线程中可以安全的访问。但是对 event_base 的循环(下面会马上解释什么是“对 event_base 的循环”)只能在某个线程中执行。如果你希望多个线程进行循环[......]

继续阅读

没有评论

Libevent(1)— 简介、编译、配置

2012 年 12 月 26 日 by name5566 Categories: Computer Science, Concurrency, Network, Server Dev

参考文献列表:
http://www.wangafu.net/~nickm/libevent-book/

此文编写的时候,使用到的 Libevent 为 2.0.21

Libevent 之跨平台

在处理大量 SOCKET 连接时,使用 select 并不高效。各个系统都提供了处理大量 SOCKET 连接时的解决方案:

  1. Linux 下的 epoll()
  2. BSD 下的 kqueue()
  3. Solaris 下的 evports
  4. Windows 下的 IOCP

由于各个平台使用了不同的接口,那么我们需要编写跨平台的高性能异步程序时就需要做一层跨平台封装。
这个时候 Libevent 就成[......]

继续阅读

没有评论

Reactor 和 Proactor 模式

2012 年 12 月 20 日 by name5566 Categories: Computer Science, Concurrency, Network, Server Dev

参考文献列表:
http://www.artima.com/articles/io_design_patterns2.html

通常来说,I/O 多路复用机制(I/O multiplexing mechanisms)依赖于一个事件多路分用器(Event demultiplexor)。我们常见的事件多路分用器包括:Linux 的 EPOLL 和 Windows 的 IOCP(如果你使用过 IOCP 或者 EPOLL,那么会更加容易理解相关内容)。一个多路分用器分发 I/O 事件到特定的事件处理函数上。对于开发者来说,他只需要注册感兴趣的事件并且提供事件处理函数。事件多路分用器负责递交事件[......]

继续阅读

2 条评论

如何阅读代码

2012 年 12 月 10 日 by name5566 Categories: Computer Science

重要的观念转变

有一些程序员很热爱编写代码,却讨厌阅读别人的代码。如果你学会阅读代码,它将是一件非常愉快的事情,如果你还不能体会到,那么要做的就是不断是研究、实践并坚持。这里有一些观念首先需要梳理:

  1. 阅读代码是一种重要的学习方式。阅读代码和读书一样是获取知识的方式,获取知识是我们期望的结果,因此和读书一样不要忘记总结和记录
  2. 通过正确的进行代码审查(阅读代码)能够大大的降低代码中存在的错误
  3. 为了维护代码,我们要有较强的代码阅读能力。现实的情况是我们很少完全的一个人从零开始编写代码(也就意味着我们在工作中必须阅读他人的代码)
  4. 我们编写的代码需要被阅读,因此保证可读性是第一要务[......]

继续阅读

2 条评论

Condition Variables 同步机制

2012 年 11 月 30 日 by name5566 Categories: C/C++, Computer Science, Concurrency, Linux

参考文献列表:
https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables

POSIX Pthreads 规范定义了一个强大的同步机制 Condition Variables。

理解 Condition Variables

Condition Variables 和锁定机制有所不同(Mutexes 等),它提供了另外一种同步的机制。例如,当某个线程拥有 mutex 时,mutex 被用于让其他的线程等待(直到拥有线程释放此 mutex),相比较来说,一个 condition variable 则被用于让当前线程等待,直[......]

继续阅读

没有评论

Mac OS X 试玩

2012 年 11 月 18 日 by name5566 Categories: Computer Science

本文写作环境为:Macbook Air(2012)、Mac OS X(Version: 10.8.2)

快捷键

你可以在 http://support.apple.com/kb/HT1343?viewlocale=zh_CN 得到一份 Mac OS X 的键盘快捷键列表,常用的快捷键如下:

  1. Command-C 复制
  2. Command-V 粘贴
  3. Command-X 剪贴
  4. Command-Z 重做
  5. Command-W 关闭当前窗口
  6. Command-M 最小化当前窗口
  7. Control-Command-F 对当前窗口开启或者关闭全屏显示
  8. Command-N 对[......]

继续阅读

没有评论

Linux C++ 服务器开发常用工具简述

2012 年 11 月 02 日 by name5566 Categories: Computer Science, Linux, Tools

远程登录

无论你使用的机器是 Windows、Linux 还是 MacOS,都可以使用工具远程登录到 Linux 服务器上去。在此我们通常使用 SSH 协议(包括 SSH-1 和 SSH-2 两个版本,它们之间不相兼容,建议使用 SSH-2),SSH 协议是一个用于安全数据通信的协议(相比下 FTP、Telnet 本质上是不安全的)。一些 Linux 发行版会预装 SSH Server,有了 SSH Server 我们就可以通过 SSH Client 使用远程服务器上的 Shell 服务。常见的 SSH Client 有(这里我使用的是 Windows 机器):

  1. SecureCRT
  2. PuTT[......]

继续阅读

没有评论