python如何操作socketserver
python3操作socketserver
socketserver是標準庫中的一個高階模組,用於網路客戶端與伺服器的實現.模組中,已經實現了一些可供使用的類。
在python3中,匯入socketserver模組使用的命令:
import socketserver
socketserver模組包括許多可以簡化TCP,UDP,UNIX域套接字伺服器實現的類。
1.處理程式
使用socketserver模組 ,必須先定義一個繼承自BaseRequestHandle的處理程式類。
BaseRequestHandle類的例項化可以實現以下方法:
sock.handle()呼叫該方法執行實際的請求操作.呼叫函式可以不帶任何引數,但是幾個例項變數包含有用的值。
sock.request包含請求。
sock.client_address包含客戶端的地址。
sock.server包含呼叫處理程式的例項。
對於TCP之類的資料流服務,sock.request屬性是套接字物件。
對於資料包服務,還是包含收到資料的位元組字串。
2.sock.setup()該方法在handle()之前呼叫.預設情況下,不執行任何操作.如果希望伺服器實現更多連線設定(如建立SSL連線),則無需呼叫該方法。
3.sock.finish()呼叫本方法可以在執行完handle()之後執行清除操作.預設情況下,不執行任何操作.如果setup()和handle()方法都不生成異常,則無需呼叫該方法。
如果知道應用程式只能操縱面向資料流的連線(如TCP),那麼應從StreamRequestHandle繼承,而不是BaseRequestHandler.StreaRequestHandler類設定了兩個屬性,sock.wfile是將資料寫入客戶端的類檔案物件,sock.rfile是從客戶端讀取資料的類檔案物件。
如果編寫針對資料包操作的處理程式並將響應持續返回給傳送方,那麼它應當從DategramRequestHandler繼承.它提供的類介面與StreamREquestHandler相同。
相關推薦:《》
2.伺服器
要使用處理程式,必須將其插入到伺服器物件,定義了四個基本的服務類。
(1).TCPServer(address,handler) 支援使用IPV4的TCP協議的伺服器,address是一個(host,port)元組. Handler是BaseRequestHandler或StreamRequestHandler類的子類的例項. (2).UDPServer(address,handler) 支援使用IPV4的UDP協議的伺服器,address和handler與TCPServer類似. (3).UnixStreamServer(address,handler) 使用UNIX域套接字實現面向資料流協議的伺服器,繼承自TCPServer. (4).UnixDatagramServer(address,handler) 使用UNIX域套接字實現資料包協議的伺服器,繼承自UDPServer.
所有四個服務類的例項都有以下方法和變數:
1.sock.socket 用於傳入請求的套接字物件 2.sock.server_address 監聽伺服器的地址.比如元組("127.0.0.1",80) 3.sock.RequestHandlerClass 傳遞給伺服器建構函式並由使用者提供的請求處理程式類. 4.sock.serve_forever() 處理無限的請求. 5.sock.shutdown() 停止serve_forever()迴圈. 6.sock.fileno() 返回伺服器套接字的整數檔案描述符.該方法可以有效的透過輪詢操作(如select()函式) 使用伺服器例項。
3.定義自定義伺服器
伺服器往往需要特殊的配置來處理不同的網路地址簇.超時期,併發和其他功能,可以透過繼承上面四個基本伺服器類來自行定義。
可以透過混合類獲得更多伺服器功能,這也是透過程式或執行緒分支新增併發的方法.為了實現併發性,定義了以下類:
1.ForkingMinIn 將UNIX程式分支新增到伺服器的混合方法,使用該方法可以讓伺服器服務多個客戶. 2.ThreadingMinIn 修改伺服器的混合類,可以使用多執行緒服務多個客戶端.
要向伺服器新增這些功能,可以使用多重繼承,其中首先列出了混合類.
由於併發伺服器很常用,為了定義它,SockServer預定義了以下伺服器類:
1.ForkingUDPServer(address,handler) 2.ForkingTCPServer(address,handler) 3.TthreadingUDPServer(address,handler) 4.ThreadingTCPServer(address,handler)
SockerServer模組中的類主要有以下幾個:
1.BaseServer 包含伺服器的核心功能與混合類(min-in)的鉤子功能.這個類主用於派生, 不要直接生成這個類的類物件,可以考慮使用TCPServer和UDPServer類. 2.TCPServer 基本的網路同步TCP伺服器 3.UDPServer 基本的網路同步UDP伺服器 4.ForkingMinIn 實現了核心的程式化功能,用於與伺服器類進行混合(min-in),以提供一些非同步特性. 不要直接生成這個類的物件 5.ThreadingMinIn 實現了核心的執行緒化功能,用於與伺服器類進行混合(min-in),以提供一些非同步特性, 不要直接生成這個類的物件 6.ForkingTCPServer ForkingMinIn與TCPServer的組合 7.ForkingUDPServer ForkingMinIn與UDPServer的組合 8.BaseRequestHandler 9.StreamRequestHandler TCP請求處理類的一個實現 10.DataStreamRequestHandler UDP請求處理類的一個實現
使用socketserver模組編寫的TCP伺服器端程式碼:
# !/usr/bin/env python # _*_coding:utf-8_*_ import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): print("from conn:",self.request) s1=socketserver.ThreadingTCPServer(("127.0.0.1",9999),MyServer) s1.serve_forever()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756/viewspace-2837287/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 學習筆記 - socketserver原始碼剖析Python筆記Server原始碼
- python socketserver處理客戶端的流程PythonServer客戶端
- Python如何操作MySQLPythonMySql
- SocketServer 原始碼分析Server原始碼
- Python Selenium如何操作CookiesPythonCookie
- SocketServer.py 淺析Server
- 18 Python如何操作檔案?Python
- 如何用python pandas操作excel?PythonExcel
- 如何使用PYTHON操作攝像頭Python
- 基於python的ftp(含資料庫、含多執行緒、含socketserver)PythonFTP資料庫執行緒Server
- python3.9中字典合併如何操作?Python
- Python操作WordPython
- Python 操作 MySQLPythonMySql
- python 操作redisPythonRedis
- Python操作SQLServerPythonSQLServer
- python操作csvPython
- python 操作 GitPythonGit
- python基本操作Python
- Python字串操作Python字串
- Python操作RedisPythonRedis
- python操作excelPythonExcel
- python操作mysqlPythonMySql
- python操作elasticsearchPythonElasticsearch
- Python如何對浮點數進行取整操作?Python
- Python3編碼如何實現檔案操作?Python
- 粘包問題、socketserver模組實現併發Server
- 使用Python操作MySQLPythonMySql
- python操作redis(二)PythonRedis
- Python操作MySQL分享PythonMySql
- python 操作 Excel 表格PythonExcel
- Python列表切片操作Python
- Python操作檔案Python
- [py]python操作zookeeperPython
- python基礎操作Python
- java socket 通訊socketServer 服務端多執行緒JavaServer服務端執行緒
- Python集合操作總結Python
- python_檔案操作Python
- 1.4.0 Python檔案操作Python