在网络编程中,往往涉及到定时器的使用。很多程序员甚至把定时器实现的机制作为评判一个网络库或者服务器的一个重要考察点。
这篇博文就分析两个项目的定时器实现,第一个是zaver,第二个是muduo。
在网络编程中,往往涉及到定时器的使用。很多程序员甚至把定时器实现的机制作为评判一个网络库或者服务器的一个重要考察点。
这篇博文就分析两个项目的定时器实现,第一个是zaver,第二个是muduo。
muduo是陈硕开源出来的网络库,提供方便的TCPServer等类,几行代码便可以实现高效的服务器。shadowsocks是python编写的大名鼎鼎的翻墙工具,网络处理部分的代码也是十分优秀。两者无疑都以epoll为根基,笔者在阅读这两部分代码时,觉得都很好,所以写下这篇博客记录。
要看懂muduo,先搞懂几个概念。channel
,poller
,connection
。
在阅读shadowsocks的代码过程中,发现ss的lrucache
实现不是很友好。想到以前看过openresty的lru-cache模块https://github.com/openresty/lua-resty-lrucache
,春哥代码写的很好,所以此文进行一番分析。
上一篇写了clowwindy很早的一个版本的实现,那个版本比较简陋,和现在最新的版本差别还是不小。目前的版本使用了更高效的IO复用,定义了状态机,代码也复杂一点。
这个在绝对是shadowsocks最核心的模块。那么这个模块是做什么的呢?模块的中文是TCP流量重传
。
在sslocal
的作用是把浏览器传来的流量加密传给ssserver
代理,并且把ssserver
传来的流量解密后传给浏览器。
openresty大名如雷贯耳,有着活跃的社区和广泛的用户。它借助强大的nginx和lua语言,构建了轻巧但是性能强大的web技术栈。
这两天开始认真关注起这个项目来,在github下载源码并且运行了试试,觉得不错。本人以https://github.com/agentzh/lua-resty-balancer这个项目为例,介绍怎么使用openresty进行一致性hash的负载均衡
一切都在我的mbpr上进行。
最近的编程状态还可以,写代码的时候,有不错的设计准则和代码规范在心中。我想这段时间对kazoo
和youtube-dl的阅读起了很大的作用吧,虽然只是粗略的阅读,但是对我而言仍然收益匪浅。
比如说kazoo的client保存公共资源,handler使用client的资源处理具体事情,我把鹰眼项目的成功率封装成模块,使用server提供的资源来处理环比对比。再比如kazoo使用partial提供API,而我也在鹰眼中把成功率模块中的函数以partial形式提供给server使用。而youtube-dl中面向对象的良好使用也给了我很大的启迪。
回到家后记录这一天。
在街头拉琴16年的那些日子,亦有许多常人难以想象之经历,让人难以释怀,许多次意欲放弃;当看到大家闻琴声而不由自主驻足,当有人双手将钱币放置琴盒之中,尤其是当听到妈妈告诉孩子“这是二胡”的时候,所有的辛苦和苦楚,顿时都化作了幸福和满足。