twisted network programming essentials 读书体会

来源:互联网 发布:linux创建用户组命令 编辑:程序博客网 时间:2024/05/15 05:57

首先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) 作者的整本书的流程就是从代码开始,然后解释代码,这样的流程比较容易让人接受很好。

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,这是他们的区别。





0 0