日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

twsited快速基础

發布時間:2025/3/12 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 twsited快速基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

協議處理類通常會子類化twisted.com .internet.protocol. protocol。大多數協議處理程序從這個類繼承,或者從它的一個方便子類繼承。協議類的實例按連接實例化,按需實例化,并在連接完成時消失。這意味著持久化配置不會保存在協議中。

持久化配置保存在工廠類中,工廠類通常繼承自twisted.com .internet.protocol.Factory。工廠的buildProtocol方法用于為每個新連接創建Protocol。

能夠在多個端口或網絡地址上提供相同的服務通常很有用。這就是為什么工廠不監聽連接,實際上不知道任何關于網絡的信息。

Twisted協議以異步方式處理數據。當事件從網絡到達時,協議protocol響應它們,而事件到達將調用協議上的方法。

這是最簡單的協議之一。它只是簡單地回寫所寫的內容,而不響應所有事件。

#!/usr/bin/env python2 # -*- coding: utf-8 -*-from twisted.internet.protocol import Protocol class Echo(Protocol):def dataReceived(self, data): self.transport.write(data)

下面是一個協議響應另一個事件的例子:

from twisted.internet.protocol import Protocol class QOTD(Protocol):def connectionMade(self):self.transport.write("一天一蘋果,不用請醫生\r\n") self.transport.loseConnection()

這個協議用一個名言響應初始連接,然后終止連接。
connectionMade事件通常相應連接對象啟動發生,以及任何初始的問候語(如上面的QOTD協議)。connectionLost事件應用于任何特定于連接的對象消失。下面是一個例子:

from twisted.internet.protocol import Protocol class Echo(Protocol):def __init__(self, factory):self.factory = factory def connectionMade(self):self.factory.numProtocols = self.factory.numProtocols + 1self.transport.write("歡迎,這是第%d個運行中的連接\n" % (self.factory.numProtocols,)) def connectionLost(self, reason):self.factory.numProtocols = self.factory.numProtocols - 1 def dataReceived(self, data): self.transport.write(data)

工廠用于共享存在于超過任何給定連接的生命周期的狀態。

在Echo協議代碼中,loseConnection是在寫入傳輸之后立即調用的。只有當Twisted將所有數據寫完入操作系統時,loseConnection調用才會關閉連接,因此在這種情況下使用它是安全的,無需擔心傳輸寫入丟失。如果生產者與傳輸一起使用,loseConnection只會在生產者解除注冊時關閉連接。在某些情況下,等待所有數據被寫出來并不是我們想要的。由于網絡故障、bug或另一端連接者的惡意,寫入到傳輸端的數據可能無法交付,因此即使調用loseConnection,連接也不會丟失。在這些情況下,可以使用abortConnection:它立即關閉連接,而不管傳輸中仍然未寫入的緩沖數據或仍然有注冊的生產者。

在本例中,我創建了一個協議工廠。我想告訴這個工廠它的任務是構建QOTD協議實例,所以我設置了它的buildProtocol方法來返回QOTD類的實例。然后,我想在一個TCP端口上偵聽,因此我創建了一個TCP4ServerEndpoint來標識我想綁定到的端口,然后將我剛剛創建的工廠傳遞到它的偵聽方法。
listen()告訴反應器使用特定的協議來處理到端點地址的連接,但是反應器需要運行才能執行任何操作。run()啟動反應器,然后永遠等待連接到達指定的端口。您可以通過在終端中按Control-C或調用reactor.stop()來停止反應器。

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Sun Sep 16 15:27:20 2018@author: myhaspl @email:myhaspl@myhaspl.com server """ from twisted.internet.protocol import Factory from twisted.internet.endpoints import TCP4ServerEndpoint from twisted.internet import reactor from twisted.internet.protocol import Protocol class QOTD(Protocol):#協議類def connectionMade(self):self.transport.write("您好!歡迎您的登錄,再見!\r\n") self.transport.loseConnection()class QOTDFactory(Factory):def buildProtocol(self, addr):return QOTD()endpoint = TCP4ServerEndpoint(reactor, 21200) endpoint.listen(QOTDFactory()) reactor.run()

============================

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Sun Sep 16 15:27:20 2018@author: myhaspl @email:myhaspl@myhaspl.com server """ from twisted.internet.protocol import Factory from twisted.internet.endpoints import TCP4ServerEndpoint from twisted.internet import reactor from twisted.internet.protocol import Protocol class QOTD(Protocol):#協議類def connectionMade(self):self.transport.write("您好!歡迎您的登錄,再見!\r\n") self.transport.loseConnection()class QOTDFactory(Factory):def buildProtocol(self, addr):return QOTD()if __name__=="__main__":endpoint = TCP4ServerEndpoint(reactor, 21210)endpoint.listen(QOTDFactory())reactor.run()

=============================

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Sun Sep 16 15:28:44 2018@author: myhaspl @email:myhaspl@myhaspl.com client """from twisted.internet.protocol import Protocol from twisted.internet.protocol import ClientFactory from twisted.internet import reactorHOST="localhost" PORT=21210 class ClientMessage(Protocol):#協議類def connectionMade(self):data=raw_input("請輸入要發送給服務器的消息")self.transport.write(data)def dataReceived(self, data):print data self.transport.loseConnection()class ClientMessageFactory(ClientFactory):#工廠類def startedConnecting(self, connector):print '開始連接'def buildProtocol(self, addr):print '已經連接.'return ClientMessage()def clientConnectionLost(self, connector, reason):print '%s==>連接丟失!'%reasondef clientConnectionFailed(self, connector, reason):print '%s==>連接錯誤!'%reasonif __name__=="__main__":reactor.connectTCP(HOST, PORT, ClientMessageFactory())reactor.run()

客戶端

開始連接
已經連接.
請輸入要發送給服務器的消息hi
您好!歡迎您的登錄,再見!

[Failure instance: Traceback (failure with no frames): <class ‘twisted.internet.error.ConnectionDone’>: Connection was closed cleanly.
]==>連接丟失!

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Sun Sep 16 15:27:20 2018@author: myhaspl @email:myhaspl@myhaspl.com server """ from twisted.internet.protocol import Factory from twisted.internet.endpoints import TCP4ServerEndpoint from twisted.internet import reactor from twisted.internet.protocol import Protocol import timeclass QOTD(Protocol):#協議類def connectionMade(self):print "接受連接"self.transport.write("您好!歡迎您的登錄,再見!\r\n") def dataReceived(self, data):if data:print "客戶端發來消息:%s"%data self.transport.write("[%s]:%s"%(time.ctime(),data))self.transport.loseConnection() class QOTDFactory(Factory):def buildProtocol(self, addr):return QOTD()if __name__=="__main__":endpoint = TCP4ServerEndpoint(reactor, 21210)endpoint.listen(QOTDFactory())reactor.run()

接受連接
客戶端發來消息:hello,1

#!/usr/bin/env python2 # -*- coding: utf-8 -*-""" Created on Sun Sep 16 15:28:44 2018@author: myhaspl @email:myhaspl@myhaspl.com client """from twisted.internet.protocol import Protocol from twisted.internet.protocol import ClientFactory from twisted.internet import reactorHOST="localhost" PORT=21210 class ClientMessage(Protocol):#協議類def connectionMade(self):data=raw_input("請輸入消息:")self.transport.write(data)def dataReceived(self, data):print "服務器回應:%s"%data class ClientMessageFactory(ClientFactory):#工廠類def startedConnecting(self, connector):print '開始連接'def buildProtocol(self, addr):print '已經連接.'return ClientMessage()def clientConnectionLost(self, connector, reason):print '%s==>連接丟失!'%reasondef clientConnectionFailed(self, connector, reason):print '%s==>連接錯誤!'%reasonif __name__=="__main__":reactor.connectTCP(HOST, PORT, ClientMessageFactory())reactor.run()

開始連接
已經連接.
請輸入消息:hello,1
服務器回應:您好!歡迎您的登錄,再見!

服務器回應:[Sun Sep 16 16:37:08 2018]:hello,1
[Failure instance: Traceback (failure with no frames): <class ‘twisted.internet.error.ConnectionDone’>: Connection was closed cleanly.
]==>連接丟失!

總結

以上是生活随笔為你收集整理的twsited快速基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。