专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Python » 如何使用代理服务器:使用Twisted建立你的服务器 »正文

如何使用代理服务器:使用Twisted建立你的服务器

来源: 发布时间:星期四, 2009年1月8日 浏览:21次 评论:0
  Twisted不只是在性能和环境多样适应性上精益求精它最重要个突破在于使用组件化方式开发网络应用可以让大家审视自己最为关注重点而忽略些辅助性事务当几名开发人员将自己成果完成时汇聚到起就能成为个强大系统当然需要窍门技巧来进行这的中协调协调基础是我们自己必须了解这样过程和它们的间接口关联   

  最为简单情况下除了了解清reactor简单使用你还要了解Protocol和Factory它们最终都会由reactor侦听建立和run来统调度起来   

  建立服务器个要解决问题就是服务和外界交流协议协议定义在twisted中是通过继承twisted.ernet.protocol.Protocol类来实现在协议中你可以定义连接、数据接收、断开连接等系列事件如果进行响应但是对于所有连接上来协议建立、持久配置数据存储这样内容并不会保存在协议中   

  持久配置数据存储通常都会保存在工厂里   

  工厂定义在twisted中是通过继承twisted.ernet.protocol.Factory类来实现twisted提供了缺省工厂实现最为普通需求它会例子化每个协议并且通过设置每个协议中factory属性来使协议可以使用到它自己做这个设置作用就是让协议在进行处理连接数据时可以使用到工厂中存储持久配置数据工厂启动是需要reactor真实建立侦听并启动才可以实现   

  reactor侦听建立可以参考  twisted.ernet.erfaces.IReactorTCP.listenTCP这时我们先只说建立TCP服务器侦听如果你需要其它种类侦听建立参考IReactor*.listen*系列API   

  整理总结我们书写个twistedDaemon实质上会关注 3个层次对象它们互相可配置可独立开发只需要通过简单配置就可结合使用层次就是侦听建立、工厂化、服务器运行它需要reactor开发第 2个层次就是服务化、用户连接建立、持久配置数据存储、协议例子化它需要factory开发第 3个层次就是用户连接建立后事件处理这就需要protocol开发了  

  请求和例子化顺序是reactor、factory、protocol但是真实开发顺序返回是倒过来你可能最得到需求是要用什么协议在设计协义时才能了解需要哪些持久数据和在所有用户请求是需要共享内容以及化时所需要完成事务最终你才能依据你要应用平台来考虑优化思路方法我们先来看看如何完成个自己协议开发以适用于twisted框架   

  理解protocol工作   

  twistedprotocol是通过异步处理方式来处理数据这就意味着protocol会通过事件来进行网络数据处理并且在处理中不会进行任何等待这是个最简单Echo协议代码:  

 Toggle  line  numbers   
    1  from  twisted.ernet.protocol  import  Protocol  
    2   
    3    Echo(Protocol):  
    4   
    5      def  dataReceived(self,  data):  
    6          self.transport.write(data) 


  echo是个非常简单协议它所做事就是将客户机发过来数据完整反回给客户端这里它没有响应所有思路方法但是也是个可以使用并且运行协议下面代码响应了另个事件:  

 Toggle  line  numbers   
    1  from  twisted.ernet.protocol  import  Protocol  
    2   
    3    HelloHD(Protocol):  
    4   
    5      def  connectionMade(self):  
    6          self.transport.write("Hello  This  is  HD's  Test  protocolrn")  
    7          self.transport.loseConnection
 

  这样在用户连接建立时向用户发送个欢迎消息然后就断开了和客户机连接下面再看个实现更多事件协议实现:  

 Toggle  line  numbers   
    1  from  twisted.ernet.protocol  import  Protocol  
    2   
    3    Echo(Protocol):  
    4   
    5      def  connectionMade(self):  
    6          self.factory.numProtocols  =  self.factory.numProtocols+1  
    7            self.factory.numProtocols  >  100:  
    8              self.transport.write("Too  many  connections,  try  later")  
    9              self.transport.loseConnection  
   10   
   11      def  connectionLost(self,  reason):  
   12          self.factory.numProtocols  =  self.factory.numProtocols-1  
   13   
   14      def  dataReceived(self,  data):  
   15          self.transport.write(data) 


  这里不但向应了 3个事件:连接化、断开连接、接收到数据而且还使用了factory来存储个持久数据(当前并发用户连接数)   

  使用protocol  做完个rptocol开发如何让它放入个可以测试环境中试验呢?以下是个最为简单办法进行测试:  

 Toggle  line  numbers   
    1  from  twisted.ernet.protocol  import  Protocol,  Factory  
    2  from  twisted.ernet  import  reactor  
    3   
    4    HelloHD(Protocol):  
    5   
    6      def  connectionMade(self):  
    7          self.transport.write("Hello  This  is  HD's  Test  protocolrn")  
    8          self.transport.loseConnection  
    9   
   10   
   11  #  下面就是施展Twisted神奇代码了  
   12  factory  =  Factory  
   13  factory.protocol  =  HelloHD  
   14   
   15  #  侦听运行于8025端口最好是个大于1024端口  
   16  reactor.listenTCP(8025,  factory)  
   17  reactor.run 
 最后 6行代码就可以将你protocol运行起来成为个可测试daemon运行起来测试客户端可以使用你telnet用telnet登录到你服务器8025端口就可以进行最初级测试了这几行代码只需要看看Twisted文档就能明白它含义了的前reactor介绍说明中也非常细说了你可以有选择和运行思路方法

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: