网络编程(九.2):Python裸写异步非阻塞网络框架(图示)

网络编程(九.2):Python裸写异步非阻塞网络框架(图示)

一年前在专栏里发布了一个Python裸写的网络状态机,这个Python版的只是一个Demo,很多异常处理是不严谨的,但的确是目前我知道的最简版的“异步非阻塞网络框架”了。也有很多人表示代码有点“绕”,看不懂。

网友@陈超 画了一个状态流转图,希望能有助于大家理解:

异步非阻塞网络架构图

框架本身是这个项目的一部分51reboot/simpleMon 主要展示了一个类似OpenFalcon架构的监控系统的Toy版。

也有一个C++(其实是C with class)的严谨版网络框架,现在主要用于360的部分服务。也被一些网友用于暴风影音的一些线上模块里。下面有介绍:

下面是gko_pool的介绍:

曾经在上家公司做了一个内网P2P的传输工具名曰auxten/gingko
当时太菜了,网络部分写的很差,各种阻塞式网络通信
后来离职把memcached的代码研究了一下,感觉里面的网络模型非常先进
我就把memcached的网络部分抽取出来和gingko做了结合,写成了一个网络框架叫gko_pool

大致特性是:

  • 完全异步化(包括DNS解析)
  • 可以listen一个端口当server,也可以主动发起连接写client
  • worker是对等的多线程
  • 内置一个简单的“内存池”

看代码发现memcached状态机有个逻辑上的bug 顺手给memcached提了个patch
后来这事就被淡忘了,过了两年被维护者发现合到master上了。

言归正传,可以毫不夸张的说memecached是多线程异步网络编程的一个丰碑(nginx是多进程异步网络编程的一个丰碑)
我就把memcached的网络部分抽取出来写成了一个网络框架叫 github.com/auxten/gko_p

举个栗子:http刷票器,在我的笔记本虚机上也能达到300KQPS,控制了一下速度,一不小心就把sina的一个小服务打挂了。

刷票器代码见这里:github.com/auxten/gko_p

我为了刷票刷的真实,还写了这么多UserAgent,刷票界的良心啊,哈哈哈

更多例子,比如:一个自定义协议的client、server等请移步github

这套库的稳定性大家不用质疑,已经用在了我现在公司的上万台服务器的很多网络Daemon上

系列文章见这里:

文章被以下专栏收录