前边ioloop看完了,application以前也看过一点,现在看看application和IOLoop是怎么结合起来的。

Application里的listen(port),实例化一个HTTPServer(),然后listen port address。

HTTPServer()继承自TCPServer, httputil.HTTPServerConnectionDelegate。HTTPServer参数传入application实例,还有一些参数。app保存在属性request_callback中,调用TCPServer的初始化方法,ioloop默认为None。然后都是参数的 保存。
listen方法是TCPServer里的,第一个方法返回socket,后调用add_sockets。self.ioploop为None,调用类静态方法IOLoop.current(),实例化IOLoop。然后将所有socket保存到_sockets中,调用在netutil.py里的add_accept_handler。

add_accept_handler第二个参数是一个函数,_handle_connection,ssl的不看。总的说就是实例化一个IOStream,然后调用handle_stream,handle_stream应该是看HTTPServer里的定义,这里没有。我去 看到这里感觉又要晕了。httpserver.py里的handle_stream应该是启动了httpserver。看到这里总结一个下。

一条是add_accept_handler的第二个参数应该是启动httpserver的功能的一个函数,看参数名是个callback。实例化了一个IOStream还没看,然后调用handle_stream启动httpserver。

额,先看看IOStream。继承BaseIOStream,额,没啥看的,付了一堆的变量。然后看httpserver.py里的handle_stream,一个context,看HTTP1ServerConnection,主要看start_serving,先进行类型判断,这是返回true,因为HTTPServer继承自httputil.HTTPServerConnectionDelegate,类似接口,只定义了两个空方法。然后后边运行_server_request_loop,异步。主要调了连接的read_response方法。大体看了一下,就是对包内容进行解析了。不看了

没仔细看逻辑,感觉画个图会好一点,看的都快吐了。看个流程都这么麻烦,以后再静下心来看一遍。放松一下

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply