創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比薊州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式薊州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋薊州地區(qū)。費(fèi)用合理售后完善,十年實體公司更值得信賴。python中操作socketserver的方法?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
python3操作socketserver
socketserver是標(biāo)準(zhǔn)庫中的一個高級模塊,用于網(wǎng)絡(luò)客戶端與服務(wù)器的實現(xiàn).模塊中,已經(jīng)實現(xiàn)了一些可供使用的類。
在python3中,導(dǎo)入socketserver模塊使用的命令:
import socketserver
socketserver模塊包括許多可以簡化TCP,UDP,UNIX域套接字服務(wù)器實現(xiàn)的類。
1.處理程序
使用socketserver模塊 ,必須先定義一個繼承自BaseRequestHandle的處理程序類。
BaseRequestHandle類的實例化可以實現(xiàn)以下方法:
sock.handle()調(diào)用該方法執(zhí)行實際的請求操作.調(diào)用函數(shù)可以不帶任何參數(shù),但是幾個實例變量包含有用的值。
sock.request包含請求。
sock.client_address包含客戶端的地址。
sock.server包含調(diào)用處理程序的實例。
對于TCP之類的數(shù)據(jù)流服務(wù),sock.request屬性是套接字對象。
對于數(shù)據(jù)報服務(wù),還是包含收到數(shù)據(jù)的字節(jié)字符串。
2.sock.setup()該方法在handle()之前調(diào)用.默認(rèn)情況下,不執(zhí)行任何操作.如果希望服務(wù)器實現(xiàn)更多連接設(shè)置(如建立SSL連接),則無需調(diào)用該方法。
3.sock.finish()調(diào)用本方法可以在執(zhí)行完handle()之后執(zhí)行清除操作.默認(rèn)情況下,不執(zhí)行任何操作.如果setup()和handle()方法都不生成異常,則無需調(diào)用該方法。
如果知道應(yīng)用程序只能操縱面向數(shù)據(jù)流的連接(如TCP),那么應(yīng)從StreamRequestHandle繼承,而不是BaseRequestHandler.StreaRequestHandler類設(shè)置了兩個屬性,sock.wfile是將數(shù)據(jù)寫入客戶端的類文件對象,sock.rfile是從客戶端讀取數(shù)據(jù)的類文件對象。
如果編寫針對數(shù)據(jù)包操作的處理程序并將響應(yīng)持續(xù)返回給發(fā)送方,那么它應(yīng)當(dāng)從DategramRequestHandler繼承.它提供的類接口與StreamREquestHandler相同。
2.服務(wù)器
要使用處理程序,必須將其插入到服務(wù)器對象,定義了四個基本的服務(wù)類。
(1).TCPServer(address,handler) 支持使用IPV4的TCP協(xié)議的服務(wù)器,address是一個(host,port)元組. Handler是BaseRequestHandler或StreamRequestHandler類的子類的實例. (2).UDPServer(address,handler) 支持使用IPV4的UDP協(xié)議的服務(wù)器,address和handler與TCPServer類似. (3).UnixStreamServer(address,handler) 使用UNIX域套接字實現(xiàn)面向數(shù)據(jù)流協(xié)議的服務(wù)器,繼承自TCPServer. (4).UnixDatagramServer(address,handler) 使用UNIX域套接字實現(xiàn)數(shù)據(jù)報協(xié)議的服務(wù)器,繼承自UDPServer.
所有四個服務(wù)類的實例都有以下方法和變量:
1.sock.socket 用于傳入請求的套接字對象 2.sock.server_address 監(jiān)聽服務(wù)器的地址.比如元組("127.0.0.1",80) 3.sock.RequestHandlerClass 傳遞給服務(wù)器構(gòu)造函數(shù)并由用戶提供的請求處理程序類. 4.sock.serve_forever() 處理無限的請求. 5.sock.shutdown() 停止serve_forever()循環(huán). 6.sock.fileno() 返回服務(wù)器套接字的整數(shù)文件描述符.該方法可以有效的通過輪詢操作(如select()函數(shù)) 使用服務(wù)器實例。
3.定義自定義服務(wù)器
服務(wù)器往往需要特殊的配置來處理不同的網(wǎng)絡(luò)地址簇.超時期,并發(fā)和其他功能,可以通過繼承上面四個基本服務(wù)器類來自行定義。
可以通過混合類獲得更多服務(wù)器功能,這也是通過進(jìn)程或線程分支添加并發(fā)的方法.為了實現(xiàn)并發(fā)性,定義了以下類:
1.ForkingMinIn 將UNIX進(jìn)程分支添加到服務(wù)器的混合方法,使用該方法可以讓服務(wù)器服務(wù)多個客戶. 2.ThreadingMinIn 修改服務(wù)器的混合類,可以使用多線程服務(wù)多個客戶端.
要向服務(wù)器添加這些功能,可以使用多重繼承,其中首先列出了混合類.
由于并發(fā)服務(wù)器很常用,為了定義它,SockServer預(yù)定義了以下服務(wù)器類:
1.ForkingUDPServer(address,handler) 2.ForkingTCPServer(address,handler) 3.TthreadingUDPServer(address,handler) 4.ThreadingTCPServer(address,handler)
SockerServer模塊中的類主要有以下幾個:
1.BaseServer 包含服務(wù)器的核心功能與混合類(min-in)的鉤子功能.這個類主用于派生, 不要直接生成這個類的類對象,可以考慮使用TCPServer和UDPServer類. 2.TCPServer 基本的網(wǎng)絡(luò)同步TCP服務(wù)器 3.UDPServer 基本的網(wǎng)絡(luò)同步UDP服務(wù)器 4.ForkingMinIn 實現(xiàn)了核心的進(jìn)程化功能,用于與服務(wù)器類進(jìn)行混合(min-in),以提供一些異步特性. 不要直接生成這個類的對象 5.ThreadingMinIn 實現(xiàn)了核心的線程化功能,用于與服務(wù)器類進(jìn)行混合(min-in),以提供一些異步特性, 不要直接生成這個類的對象 6.ForkingTCPServer ForkingMinIn與TCPServer的組合 7.ForkingUDPServer ForkingMinIn與UDPServer的組合 8.BaseRequestHandler 9.StreamRequestHandler TCP請求處理類的一個實現(xiàn) 10.DataStreamRequestHandler UDP請求處理類的一個實現(xiàn)
使用socketserver模塊編寫的TCP服務(wù)器端代碼:
# !/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()
感謝各位的閱讀!看完上述內(nèi)容,你們對python中操作socketserver的方法大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。