国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python的Twisted框架實(shí)現(xiàn)一個簡單的服務(wù)器

2020-02-23 00:45:30
字體:
供稿:網(wǎng)友

預(yù)覽
  twisted是一個被設(shè)計的非常靈活框架以至于能夠讓你寫出非常強(qiáng)大的服務(wù)器。這種靈活的代價是需要好通過好幾個層次來實(shí)現(xiàn)你的服務(wù)器, 本文檔描述的是Protocol層,你將在這個層次中執(zhí)行協(xié)議的分析和處理,如果你正在執(zhí)行一個應(yīng)用程序,那么你應(yīng)該在讀過top level的為twisted寫插件一節(jié)中的怎樣開始寫twisted應(yīng)用程序之后閱讀本章。這個文檔只是和TCP,SSL和Unix套接字服務(wù)器有關(guān),同時也將有另一份文檔專門講解UDP。
  你的協(xié)議處理類通常是twisted.internet.protocol.Protocol的子類。許多協(xié)議處理繼承于該類或者比該類更加方便的該類的子類。一個protocol類的實(shí)例可能反復(fù)連接,也可能在連接關(guān)閉之后銷毀。這就意味著這些持續(xù)不斷的配置信息不是保存在Protocol中。
   這些持久性的配置被保存在工廠(Factory)類中,這些工廠類通常繼承至twisted.internet.protocol.Factory,默認(rèn) 的工廠類僅僅是實(shí)例化每個Protocol,然后設(shè)置他們的factory屬性為這個默認(rèn)的工廠實(shí)例本身。這就讓每個Protocol都被存儲,然后可能 修改,于是這樣就形成了Protocol的持久性。
   通常為多個端口或網(wǎng)絡(luò)地址提供相同的服務(wù)是非常有用的。這就是為什么Factory不監(jiān)聽連接,并且實(shí)際上它不知道關(guān)于網(wǎng)絡(luò)的任何事情。看 twisted.internet.interfaces.IReactorTCP.listenTCP,另一個IReactor*.listen*獲得 更多的信息。


   本文檔將要講解各個步驟。


Protocol
    如上所述,這里將通過更多代碼的輔助類和函數(shù)來了解它。一個twisted protocl通過異步方式處理數(shù)據(jù)。這就意味著protocol從不等待任何事件。相反的是在事件通過網(wǎng)絡(luò)到達(dá)的時候作出響應(yīng)。

from twisted.internet.protocol import Protocolclass Echo(Protocol): def dataReceived(self,data):  self.transport.writed(data)

這是個非常簡單的協(xié)議處理,僅僅是在獲得數(shù)據(jù)的事件中簡單的將接收到的數(shù)據(jù)發(fā)送回去,并沒有對所有的事件進(jìn)行響應(yīng)。這里有一個Protocol響應(yīng)其他事件的例子如下:

from twisted.internet.protocol import Protocolclass QOTD(Protocol): def connectionMade(self):  self.transport.write("An apple a day keeps the doctor away/r/n")   self.transport.loseConnection()

    本Protocl在一個已知的引用剛開始連接上來的時候作出響應(yīng),發(fā)送了一條消息,然后終止了連接connectionMade事件通常是在由于連接對象建立初始連接時觸發(fā),就像上面的QOTD類實(shí)際上是RFC865號文檔的一個協(xié)議基類connectionLost事件將在斷開連接的時候觸發(fā)。實(shí)例:  
       

<span style="font-family: Monospaced; color: #0000a0;"><strong>PythonCode: </strong></span><table style="width: 100%; height: 20px;" align="center" bgcolor="#e3dfe3" border="1" bordercolor="#9da7ac" cellpadding="0" cellspacing="0">   <tbody><tr><td>      <div class="textBackGround" style="font-family:Courier New;font-size:9pt;"><pre><span style="color: blue;">from</span> twisted.internet.protocol <span style="color: blue;">import</span> Protocol  <span style="color: blue;">class</span> Echo(Protocol):   <span style="color: blue;">def</span> connectionMade(self):    self.factory.numProtocols = self.factory.numProtocols+1    <span style="color: blue;">if</span> self.factory.numProtocols > 100:     self.transport.write(<span style="color: #ff44a2;">"Too many connections, <span style="color: blue;">try</span> later"</span>)     self.transport.loseConnection()   <span style="color: blue;">def</span> connectionLost(self, reason):    self.factory.numProtocols = self.factory.numProtocols-1   <span style="color: blue;">def</span> dataReceived(self, data):    self.transport.write(data)</pre>  </div>  </td>  </tr>  </tbody>  </table>             
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乃东县| 安新县| 凤翔县| 邵东县| 邹城市| 明光市| 原阳县| 南召县| 平顺县| 隆昌县| 迭部县| 呼图壁县| 西藏| 盐城市| 沅江市| 芦溪县| 柘城县| 邳州市| 弥勒县| 济宁市| 改则县| 会昌县| 疏附县| 含山县| 马关县| 泰兴市| 屯昌县| 昭苏县| 二手房| 宁武县| 朝阳市| 扎赉特旗| 健康| 平阴县| 高青县| 左贡县| 四子王旗| 苍山县| 瑞丽市| 乌拉特后旗| 湄潭县|