Python非同步通訊模組asynchat
Python非同步通訊模組asynchat
介紹
文件上說:這個模組建立在 asyncore 基礎結構上,簡化了非同步客戶端和伺服器,使得處理帶有以任意字串終止或者可變長度的元素的協議更加容易。asynchat 定義了你子類化的抽象類 async_chat ,提供了 collect_incoming_data() 和 found_terminator() 方法的實現。它使用了和 asyncore一樣的非同步迴圈,和兩種型別的通道, asyncore.dispatcher 和 asynchat.async_chat,它們可以被自由地混合在通道對映中。當接收傳入的連線請求時,一個 asyncore.dispatcher 伺服器通道往往會產生新的 asynchat.async_chat 通道物件。
模組主要包括:
- asynchat.async_chat類 - 這個類是asyncore.dispatcher的抽象子類。一般使用其collect_incoming_data()和found_terminator()方法。
- collect_incoming_data() - 接收資料。
- found_terminator() - 當輸入資料流符合由 set_terminator() 設定的終止條件時被呼叫。
- set_terminator() - 設定終止條件。
- push() - 向通道壓入資料以確保其傳輸。
例子
下面看一個簡單的例子來實現一個簡單的問候功能
import asyncore
import asynchat
import socket
class HTTPChannel(asynchat.async_chat):
def __init__(self, sock, addr):
asynchat.async_chat.__init__(self, sock)
self.set_terminator('\r\n')
self.request = None
self.response = None
self.data = None
self.shutdown = 0
def collect_incoming_data(self, data):
self.data = data
def found_terminator(self):
if not self.request:
self.request = self.data.split(None, 2)
if len(self.request) != 3:
self.shutdown = 1
else:
name = self.request[1].replace('/', '', 1)
self.response = 'Hello %s! %s' % (name, '\r\n')
self.set_terminator('\r\n\r\n')
else:
self.push('HTTP/1.0 200 OK\r\n')
self.push('Content-type: text/html\r\n')
self.push('\r\n')
self.push('<html>\r\n')
self.push('<body>\r\n')
self.push(self.response)
self.push('</body>\r\n')
self.push('</html>\r\n')
self.close_when_done()
class HTTPServer(asyncore.dispatcher):
def __init__(self):
asyncore.dispatcher.__init__(self)
self.port = 8888
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind(("", self.port))
self.listen(5)
print 'Serving at port', self.port
def handle_accept(self):
conn, addr = self.accept()
HTTPChannel(conn, addr)
s = HTTPServer()
asyncore.loop()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
HTTPChannel- asynchat.async_chat類的子類。
- 建構函式中首先設定了初始終止字串為’\r\n’。用來接收http請求。
- collect_incoming_data() - 接收資料並儲存。
- found_terminator() - 處理資料。比如請求“http://localhost:8888/kongxx”,當第一次接受到資料時,資料內容類似“GET /kongxx HTTP/1.1”,此時會將其中的kongxx當作使用者資訊保留。並設定響應文字為“Hello kongxx!”,然後設定終止字串為’\r\n\r\n’。此時當繼續有新資料接收到,這裡是http的header資訊,直到碰到http到header的結束’\r\n\r\n’時,觸發響應結果邏輯,然後程式push了響應頭和內容。
HTTPServer - 用了啟動服務來監聽埠。
測試
執行上面的程式,然後在瀏覽器位址列輸入http://localhost:8888/kongxx,就會得到下面的響應結果。
Hello kongxx!
- 1
- 1
轉載請以連結形式標明本文地址
本文地址:http://blog.csdn.net/kongxx/article/details/51158852
相關文章
- Python非同步通訊模組asyncorePython非同步
- python 多程式通訊模組Python
- 同步通訊和非同步通訊非同步
- 同步、非同步通訊非同步
- IO通訊模型(二)同步非阻塞模式NIO(NonBlocking IO)模型模式BloC
- RabbitMQ 入門(一)同步通訊和非同步通訊MQ非同步
- python Trojan 模組(我忘記幾了)—— 通訊隧道建立Python
- 模組化通訊方式對比
- Android模組化改造以及模組化通訊框架Android框架
- python非同步asyncio模組的使用Python非同步
- 移遠 EC20 模組(4G通訊模組)AT指令測試 TCP 通訊過程TCP
- 【轉載】Java非同步通訊收藏Java非同步
- Python - UDP通訊PythonUDP
- 【Python】socket通訊Python
- python中非同步非阻塞如何實現Python非同步
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- ES系列(三):網路通訊模組解析
- 【Python】通過xlwt模組使用表格Python
- vue 元件通訊總結 (非vuex和Event Bus)Vue元件
- 3.Vue非父子元件之間的通訊Vue元件
- Android跨程式通訊之非AIDL(二)AndroidAI
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- 同步和非同步關注的是訊息通訊機制,阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態非同步
- 低功耗4G模組:MQTT通訊功能MQQT
- golang語言非同步通訊之WaitGroupGolang非同步AI
- JavaThread多執行緒同步、鎖、通訊Javathread執行緒
- 即時通訊中音影片同步的實現
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- python UDP套接字通訊PythonUDP
- Python3 websocket通訊PythonWeb
- 網路通訊——socket(TCP/IP).Http,同步和非同步的區別TCPHTTP非同步