JCheng

Results 5 issues of JCheng

tinyhttpd 是一个不到 500 行的超轻量型 Http Server,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。 看完所有源码,真的感觉有很大收获,无论是 unix 的编程,还是 GET/POST 的 Web 处理流程,都清晰了不少。废话不说,开始我们的 Server 探索之旅。 ## 项目主页 http://sourceforge.net/projects/tinyhttpd/ ## 主要函数 这是所有函数的声明: ```c void accept_request(int); void bad_request(int); void cat(int, FILE *);...

童鞋,我就知道你是个好学滴好孩子~来吧,让我们进行最后的探(zuo)索(si)! 上一次我们讲到哪里?哦。。。准备讲 SessionManager 是吧,来~一个一个函数看~ 首先是初始化,设置密钥, memcache 地址,session 超时时间。 ```python # 初始化需要一个用于 session 加密的 secret, memcache 地址, session 的过期时间 def __init__(self, secret, memcached_address, session_timeout): self.secret = secret self.memcached_address = memcached_address self.session_timeout...

客官您终于回头了!让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看需要的库: * pickle: 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用就行了...) * hmac:和 hashlib 用于生成加密字符串 * uuid:用于生成一个唯一 id * memcache :Python 的 memcache 客户端 这里面有三个类,SessionData Session 和 SessionManager。先看最简单的 SessionData。 SessionData 用于以字典的结构存储 session...

tornado 里面没有 session?不,当然有~ 我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~ 于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session。光会用可不行啊,让我们看看是怎么写的~ 项目地址:[tornado-memcached-sessions](https://github.com/mmejia27/tornado-memcached-sessions) 让我们先从 demo 看起.... app.py 中: 首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的初始化方法中,设定了应用参数 settings, 之后初始化父类和 session_manager.(这是什么?暂时不管它...) ```python class Application(tornado.web.Application):...

## 线程池介绍 线程池可以说是项目中经常会用到的组件,在这里假设读者都有一定的多线程基础,如果没有的话不妨在这里进行了解:[POSIX 多线程基础](https://github.com/AngryHacker/ocean/blob/master/multithreaded%20programming/README.md)。 线程池是什么?我的简单理解是有一组预先派生的线程,然后有一个管理员来管理和调度这些线程,你只需不断把需要完成的任务交给他,他就会调度线程的资源来帮你完成。 那么管理员是怎么做的呢?一种简单的方式就是,管理员管理一个任务的队列,如果收到新的任务,就把任务加到队列尾。每个线程盯着队列,如果队列非空,就去队列头拿一个任务来处理(每个任务只能被一个线程拿到),处理完了就继续去队列取任务。如果没有任务了,线程就休眠,直到任务队列不为空。如果这个管理员更聪明一点,他可能会在没有任务或任务少的时候减少线程的数量,任务处理不过来的时候增加线程的数量,这样就实现了资源的动态管理。 那么任务是什么呢?以后台服务器为例,每一个用户的请求就是一个任务,线程不断的在请求队列里取出请求,完成后继续处理下一个请求。 简单图示为: ![threadpool](https://raw.githubusercontent.com/AngryHacker/articles/master/img/20151224173731480.png) 线程池有一个好处就是减少线程创建和销毁的时间,在任务处理时间比较短的时候这个好处非常显著,可以提升任务处理的效率。 ## 线程池实现 这里介绍的是线程池的一个简单实现,在创建的时候预先派生指定数量的线程,然后去任务队列取添加进来的任务进行处理就好。 作者说之后会添加更多特性,我们作为学习之后就以这个版本为准就好了。 项目主页:[threadpool](https://github.com/mbrossard/threadpool) ### 数据结构 主要有两个自定义的数据结构 #### `threadpool_task_t` 用于保存一个等待执行的任务。一个任务需要指明:要运行的对应函数及函数的参数。所以这里的 struct 里有函数指针和 void 指针。 ```c typedef struct { void...