# 接收流量類,繼承自asyncore.dispatcher,class Receiver(asyncore.dispatcher):
def __init__(self,conn):
asyncore.dispatcher.__init__(self,conn)
self.from_remote_buffer='' # 接收數據的緩沖區
self.to_remote_buffer='' # 發送數據的緩存區
self.sender=None1234567
第二步、根據文檔,重寫模塊中的方法,這些方法有些像生命周期中的事件,妳可以通過在這些事件中自定義代碼,使得在特定時間點執行特定的代碼。
# 接收流量類,繼承自asyncore.dispatcher,class Receiver(asyncore.dispatcher):
def __init__(self,conn):
asyncore.dispatcher.__init__(self,conn)
self.from_remote_buffer='' # 接收數據的緩沖區
self.to_remote_buffer='' # 發送數據的緩存區
self.sender=None
# 當活動opener的套接字真正創建連接時被調用。也許發送壹個“歡迎”字符串數據,或者比如,初始化壹個遠程端點的協商協議。
def handle_connect(self):
pass
# 當異步循環檢測到壹個在信道套接字上的read()調用時會成功被調用。
def handle_read(self):
read = self.recv(BUFSIZE)
self.from_remote_buffer += read # 每次在異步循環中被調用來決定是否壹個信道的套接字應該被加到寫事件可以發生的列表中。 默認方法簡單地返回 True,顯然,所有的信道會關註於寫事件。
def writable(self):
return (len(self.to_remote_buffer) > 0) # 當異步循環檢測到壹個可寫入的的套接字可以被寫入時被調用。常用這個方法為了性能優化實現必要的緩存。
def handle_write(self):
sent = self.send(self.to_remote_buffer)
self.to_remote_buffer = self.to_remote_buffer[sent:] # 當套接字被關閉的時候調用
def handle_close(self):
self.close() if self.sender:
self.sender.close()