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()