开发学院软件开发Python 使用 Twisted Matrix 框架来进行网络编程,第 1 部... 阅读

使用 Twisted Matrix 框架来进行网络编程,第 1 部分

 2008-11-13 13:15:03 来源:WEB开发网   
核心提示: Twisted Matrix 服务器另外一个重要元素是它们对持久性提供了方便的支持,反应器是一个监控 I/O 事件并对这些事件做出响应的循环,使用 Twisted Matrix 框架来进行网络编程,第 1 部分(6),应用程序类似于增强的反应器,能够将其状态进行 pickle 处理(即序列

Twisted Matrix 服务器另外一个重要元素是它们对持久性提供了方便的支持。反应器是一个监控 I/O 事件并对这些事件做出响应的循环。应用程序类似于增强的反应器,能够将其状态进行 pickle 处理(即序列化),以便用于随后的重新启动。而且,可以将应用程序“有状态地”保存到“.tap”文件,并且可以使用工具 twistd 对其进行管理和监控。这里有一个简单的示例,演示了其用法(它是根据 Twisted 文档的 OneTimeKey 示例进行建模的)。该服务器将不同的 Fibonacci 数传递给所有感兴趣的客户机,而不会在它们之间重复这些数字 — 即使服务器被停止然后被启动:

清单 5. fib_server.py

  from twisted.internet.app import Application
from twisted.internet.protocol import Protocol, Factory
class Fibonacci(Protocol):
  "Serve a sequence of Fibonacci numbers to all requesters"def dataReceived(self, data):
    self.factory.new = self.factory.a + self.factory.b
    self.transport.write('%d' % self.factory.new)
    self.factory.a = self.factory.b
    self.factory.b = self.factory.new
def main():
  import fib_server  # Use script as namespace
  f = Factory()
  f.protocol = fib_server.Fibonacci
  f.a, f.b = 1, 1
  application = Application("Fibonacci")
  application.listenTCP(8888, f)
  application.save()
if'__main__' == __name__:
  main()

您可以看到,我们所做的所有工作主要是用 application 替换 reactor 。虽然类 Application 也有一个 .run() 方法,但我们仍然使用其 .save() 方法来创建一个 Fibonacci.tap 文件。运行该服务器的操作如下所示:

清单 6. 运行 fib_server.py

% python fib_server.py
% twistd -f Fibonacci.tap
...let server run, then shut it down...
% kill `cat twistd.pid`
...re-start server where it left off...
% twistd -f Fibonacci-shutdown.tap
...serve numbers where we left off...

连接到该服务器的客户机如果只是间歇地需要新数字,而不需要尽快地得到新数字的话,那么它应该在其循环中使用 time.sleep() 。显然,更有用的服务器可以提供更有趣的有状态数据流。

接下来是什么?

本文讨论了 Twisted Matrix 比较低级别的细节 — 定义定制协议以及其他内容。但 Twisted Matrix 存在于许多级别中 — 包括用于 Web 服务及其他公共协议的高级别模板制作。在这一系列文章的下一篇中,我们将开始具体地研究 Web 服务,并将挑选一些尚未讨论的杂项主题来进行研究。

上一页  1 2 3 4 5 6 

Tags:使用 Twisted Matrix

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接