twisted network programming essentials 读书体会

首先twisted是在python结构下的一个事件驱动的网络框架。

你能够在此基础上做出遵循各种协议的client--server结构的软件应用.

刚刚读了第一大章 An Intrduction to twisted主要有例如以下体会:


1) 所谓的事件驱动是指程序的执行是由外在的因素决定的,比方GUI程序依赖的是用户的鼠标操作。网络程序依赖的是client的送回来的消息。在twisted中事情的驱动体如今re-actor中。所谓re-actor本质就是一个处理事件的循环。

2) protocal和transports的分离,协议和数据的传输是分开来的,作者这种思维是为了更好的拓展性。

3) factory设计模式在protocal中的应用。全部的协议都是由一个factory产生的,有些global的内容放到factory中比較合适。由于他能够保存protocal销毁后的内容。

4) 作者的整本书的流程就是从代码開始,然后解释代码。这种流程比較easy让人接受非常好。

5) telnel是个非常好的debug的工具,用来模拟client各种的输入响应非常适用。

6) defereds是为了让程序能异步运行的回调函数。他须要处理正常的和错误的情况,另外还要注意的是他能够有若干个处理组合成一个chain。

7) 整个库的使用结构很的清晰明了,一看代码就能理解。


前面几点是库的基础的理解,以下是一个更加详细的web样例

8)HTTP GET协议格式例如以下,他是text based协议,所以比較有趣的是在telnet中输入例如以下文本相同能够触发网络server的响应

GET / HTTP/1.1
Host: www.google.com

9)以下是我见过的最简单的server,启动他,然后在浏览器敲 localhost:8000, 你会发现什么呢?

fromtwisted.protocolsimportbasic
fromtwisted.internetimportprotocol,reactor

classHTTPEchoProtocol(basic.LineReceiver):def__init__(self):

        self.lines = []

deflineReceived(self,line):self.lines.append(line)ifnotline:

            self.sendResponse()

defsendResponse(self):
self.sendLine("HTTP/1.1 200 OK")
self.sendLine("")
responseBody="You said:\r\n\r\n"+"\r\n".join(self.lines)self.transport.write(responseBody)self.transport.loseConnection()

classHTTPEchoFactory(protocol.ServerFactory):defbuildProtocol(self,addr):

returnHTTPEchoProtocol()reactor.listenTCP(8000,HTTPEchoFactory())

reactor.run()
10)和django的差别。django是template,而twisted是用来制作template。这是他们的差别。






posted on 2017-05-17 20:01  ljbguanli  阅读(120)  评论(0编辑  收藏  举报