Twisted之客戶端程式設計

2021-06-08 05:47:30 字數 2359 閱讀 9124

主要類:reactor  、protocol

這兩個類都存在與

twisted.internet  

命名空間中

reactor物件是twisted程式設計當中的第一步,它就是乙個反應器,專門負責與服務端的連線以及監聽

與伺服器互動,一旦與服務端連線上以後,即可呼叫reactor.run()開始監聽了

,伺服器有新的任務或請求傳送到客戶端的時候,reactor即可監聽到,一旦監聽到服務端的任務或請求,reactor會將該任務或請求轉交給客戶端工廠進行處理,一直重複著監聽—轉交—監聽—轉交-.......  的工作,直到呼叫reactor.stop()或者整個程式退出時該監聽任務才會退出。

我們來看下reactor是如何連線服務端的,reactor物件提供了個connecttcp(host,port,factory)方法,該方法帶有三個引數;第乙個引數是要連線的服務端的ip位址,第二個引數是服務端在監聽的埠;既然reactor可以將服務端的任務或請求轉交給客戶端工廠,那麼它必須要有個可以轉交的工廠,乙個factory,,

第三個引數就是reactor要這個客戶端

工廠物件,該工廠類必須要繼承自protocol.clientfactory 類,protocol.clientfactory

類提供了一系列可拓展方法,如buildprotocol、clientconnectionmade、clientconnectionfailed、clientconnectionlost等,你可以通過重寫的方式自己實現。

好的,轉交工作做完之後,是不是reactor的任務就完成了呢,是的,reactor的任務到此就完成了。但是,任務或請求轉交之後,那麼誰來處理這些任務或請求呢,這就要交給工廠

protocol.clientfactory

下面的protocol.protocol

來處理了

,可以通過protocol.clientfactory

的protocol屬性來指定工廠的protocol.protocol,protocol.protocol也提供了一系列可拓展的方法,如connectionmade、connectionlost、datareceived,這裡重點講下datareceived方法,它有個data引數,該引數就是從服務端傳送至客戶端的資料,你可以通過重寫該方法的方式處理接收到的資料,同樣也可以通過透明** transport.getpeer()來獲取資料傳送端(這裡指服務端)的ip和port。

下面是乙個簡單的demo:

#coding=utf-8

from twisted.internet import reactor,protocol # 匯入 reactor , protocol

class quickdisconnectprotocol(protocol.protocol):

def connectionmade(self):self.hostinfo = self.transport.getperr() # 通過 透明**獲取資料傳送端主機資訊 ip

print "connected to %s." % self.hostinfo.host self.transport.loseconnection()class basicclientfactory(protocol.clientfactory):

protocol=quickdisconnectprotocol # 通過protocol.clientfactory 的 protocol 屬性指定 protocol.protocol

def datarecieved(self,data):      # 重寫 datarecieved 方法處理接收到的資料     

print data % "from host : %s." % self.hostinfo.host

def clientconnectionlost(self,connector,reason): print "lost connection: %s" % reason.geterrormessage() reactor.stop() # 連線斷開後終止監聽 def clientconnectionfailed(self,connector,reason): print "connection failed:%s" % reason.geterrormessage() reactor.stop() # 連線失敗後終止監聽reactor.connecttcp("192.168.10.41",80,basicclientfactory())

# 開始連線服務端reactor.run() # 開始連線服務端 reactor.run() # 開始監聽

SOCKET客戶端程式設計

1.建立socket物件 socket建構函式有4個引數,第乙個是family,代表位址家族af net,af net6等,第二個是type,套接字型別sock stream 流套接字 和sock dgram 資料報套接字 import socket s socket.socket socket.a...

瘦客戶端 胖客戶端 智慧型客戶端

胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...

胖客戶端 瘦客戶端和富客戶端

以c s結構開發的網路應用程式,需要為客戶端開發專用的客戶端軟體,相對而言其客戶端比較龐大,在客戶端可以實現很多功能,分擔伺服器的負擔,屬於胖客戶端型別。以b s結構開發的web應用,其客戶端只是乙個瀏覽器,所有業務邏輯由伺服器端進行處理,相對而言客戶端比較瘦小,故稱為瘦客戶端。目前比較流行的一種開...