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

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

 2008-11-13 13:15:03 来源:WEB开发网   
核心提示: 读者应该参考我先前的一篇技巧文章,以了解客户机应用程序的详细信息,使用 Twisted Matrix 框架来进行网络编程,第 1 部分(3),但是必须注意下面的更改,主客户机循环增加了两行: 清单 3. 增强的(阻塞)客户机循环while 1:xml_data = sock.recv(81

读者应该参考我先前的一篇技巧文章,以了解客户机应用程序的详细信息。但是必须注意下面的更改。主客户机循环增加了两行:

清单 3. 增强的(阻塞)客户机循环

  while 1:
  xml_data = sock.recv(8192)
  parser.feed(xml_data)
  sleep(5)     # Delay before requesting new records
  sock.send('NEW?') # Send signal to indicate readiness

Twisted 服务器的部件

一个 Twisted Matrix 服务器由几个模块化元素组成。在字节流级别,服务器实现了一项协议,这通常是通过继承 twisted.internet.protocol.Protocol 或继承该类先前专门化的某个子类实现的。例如,假设( twisted.protocols 中的)子类包括 dns 、 ftp 、 gnutella 、 http 、 nntp 、 shoutcast 以及其他许多协议。协议基本上应该知道如何处理连接的建立和断开,以及如何在连接中接收和发送数据。这些职责与基于 SocketServer 的服务器中的职责没有多大区别,差异在于,前者在为每个元素定义方法的模块化方面略胜一筹。

Twisted Matrix 服务器的下一个级别是工厂。在我们的 twisted-weblog-1.py 示例中,工厂除了存储协议以外其实没做别的事情。不过,在较复杂的服务器中,工厂是执行与协议服务器有关的初始化和终止化操作的好地方。最重要的一点可能是,工厂可以在 应用程序中持久存储(我们很快将看到这一点)。

协议和工厂对服务器运行时所处的网络都一无所知。相反, 反应器(reactor)是实际侦听网络的类(它利用其协议的工厂实例来进行侦听)。反应器基本上只是一个侦听给定端口和网络接口的循环(选择哪个端口和网络接口是通过调用诸如 .listenTCP() 、 .listenSSL() 或 .listenUDP() 之类的方法实现的)。Twisted Matrix 中的基本反应器 SelectReactor 运行在单个线程内,这一点是需要明白的;该服务器会针对新数据检查每一个连接,并将数据传递给相关的协议对象。所产生的结果就是, 确实不允许协议对象阻塞,甚至花费的时间太长以至无法完成(必须适当地进行协议编程)。

上一页  1 2 3 4 5 6  下一页

Tags:使用 Twisted Matrix

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