python中操作socketserver的方法

python中操作socketserver的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出文縣免費(fèi)做網(wǎng)站回饋大家。

python3操作socketserver

socketserver是標(biāo)準(zhǔn)庫(kù)中的一個(gè)高級(jí)模塊,用于網(wǎng)絡(luò)客戶端與服務(wù)器的實(shí)現(xiàn).模塊中,已經(jīng)實(shí)現(xiàn)了一些可供使用的類。

在python3中,導(dǎo)入socketserver模塊使用的命令:

import socketserver

socketserver模塊包括許多可以簡(jiǎn)化TCP,UDP,UNIX域套接字服務(wù)器實(shí)現(xiàn)的類。

1.處理程序

使用socketserver模塊 ,必須先定義一個(gè)繼承自BaseRequestHandle的處理程序類。

BaseRequestHandle類的實(shí)例化可以實(shí)現(xiàn)以下方法:

sock.handle()調(diào)用該方法執(zhí)行實(shí)際的請(qǐng)求操作.調(diào)用函數(shù)可以不帶任何參數(shù),但是幾個(gè)實(shí)例變量包含有用的值。

sock.request包含請(qǐng)求。

sock.client_address包含客戶端的地址。

sock.server包含調(diào)用處理程序的實(shí)例。

對(duì)于TCP之類的數(shù)據(jù)流服務(wù),sock.request屬性是套接字對(duì)象。

對(duì)于數(shù)據(jù)報(bào)服務(wù),還是包含收到數(shù)據(jù)的字節(jié)字符串。

2.sock.setup()該方法在handle()之前調(diào)用.默認(rèn)情況下,不執(zhí)行任何操作.如果希望服務(wù)器實(shí)現(xiàn)更多連接設(shè)置(如建立SSL連接),則無(wú)需調(diào)用該方法。

3.sock.finish()調(diào)用本方法可以在執(zhí)行完handle()之后執(zhí)行清除操作.默認(rèn)情況下,不執(zhí)行任何操作.如果setup()和handle()方法都不生成異常,則無(wú)需調(diào)用該方法。

如果知道應(yīng)用程序只能操縱面向數(shù)據(jù)流的連接(如TCP),那么應(yīng)從StreamRequestHandle繼承,而不是BaseRequestHandler.StreaRequestHandler類設(shè)置了兩個(gè)屬性,sock.wfile是將數(shù)據(jù)寫入客戶端的類文件對(duì)象,sock.rfile是從客戶端讀取數(shù)據(jù)的類文件對(duì)象。

如果編寫針對(duì)數(shù)據(jù)包操作的處理程序并將響應(yīng)持續(xù)返回給發(fā)送方,那么它應(yīng)當(dāng)從DategramRequestHandler繼承.它提供的類接口與StreamREquestHandler相同。

2.服務(wù)器

要使用處理程序,必須將其插入到服務(wù)器對(duì)象,定義了四個(gè)基本的服務(wù)類。

(1).TCPServer(address,handler)         支持使用IPV4的TCP協(xié)議的服務(wù)器,address是一個(gè)(host,port)元組.
                                           Handler是BaseRequestHandler或StreamRequestHandler類的子類的實(shí)例.
(2).UDPServer(address,handler)         支持使用IPV4的UDP協(xié)議的服務(wù)器,address和handler與TCPServer類似.
(3).UnixStreamServer(address,handler)    使用UNIX域套接字實(shí)現(xiàn)面向數(shù)據(jù)流協(xié)議的服務(wù)器,繼承自TCPServer.
(4).UnixDatagramServer(address,handler)    使用UNIX域套接字實(shí)現(xiàn)數(shù)據(jù)報(bào)協(xié)議的服務(wù)器,繼承自UDPServer.

所有四個(gè)服務(wù)類的實(shí)例都有以下方法和變量:

1.sock.socket             用于傳入請(qǐng)求的套接字對(duì)象
2.sock.server_address        監(jiān)聽(tīng)服務(wù)器的地址.比如元組("127.0.0.1",80)
3.sock.RequestHandlerClass      傳遞給服務(wù)器構(gòu)造函數(shù)并由用戶提供的請(qǐng)求處理程序類.
4.sock.serve_forever()        處理無(wú)限的請(qǐng)求.
5.sock.shutdown()           停止serve_forever()循環(huán).
6.sock.fileno()            返回服務(wù)器套接字的整數(shù)文件描述符.該方法可以有效的通過(guò)輪詢操作(如select()函數(shù))
                                 使用服務(wù)器實(shí)例。

3.定義自定義服務(wù)器

服務(wù)器往往需要特殊的配置來(lái)處理不同的網(wǎng)絡(luò)地址簇.超時(shí)期,并發(fā)和其他功能,可以通過(guò)繼承上面四個(gè)基本服務(wù)器類來(lái)自行定義。

可以通過(guò)混合類獲得更多服務(wù)器功能,這也是通過(guò)進(jìn)程或線程分支添加并發(fā)的方法.為了實(shí)現(xiàn)并發(fā)性,定義了以下類:

1.ForkingMinIn          將UNIX進(jìn)程分支添加到服務(wù)器的混合方法,使用該方法可以讓服務(wù)器服務(wù)多個(gè)客戶.
2.ThreadingMinIn        修改服務(wù)器的混合類,可以使用多線程服務(wù)多個(gè)客戶端.

要向服務(wù)器添加這些功能,可以使用多重繼承,其中首先列出了混合類.

由于并發(fā)服務(wù)器很常用,為了定義它,SockServer預(yù)定義了以下服務(wù)器類:

1.ForkingUDPServer(address,handler)
2.ForkingTCPServer(address,handler)
3.TthreadingUDPServer(address,handler)
4.ThreadingTCPServer(address,handler)

SockerServer模塊中的類主要有以下幾個(gè):

 1.BaseServer                        包含服務(wù)器的核心功能與混合類(min-in)的鉤子功能.這個(gè)類主用于派生,
                                      不要直接生成這個(gè)類的類對(duì)象,可以考慮使用TCPServer和UDPServer類.
 2.TCPServer                  基本的網(wǎng)絡(luò)同步TCP服務(wù)器
 3.UDPServer                  基本的網(wǎng)絡(luò)同步UDP服務(wù)器
 4.ForkingMinIn                實(shí)現(xiàn)了核心的進(jìn)程化功能,用于與服務(wù)器類進(jìn)行混合(min-in),以提供一些異步特性.
                                       不要直接生成這個(gè)類的對(duì)象
 5.ThreadingMinIn               實(shí)現(xiàn)了核心的線程化功能,用于與服務(wù)器類進(jìn)行混合(min-in),以提供一些異步特性,
                                        不要直接生成這個(gè)類的對(duì)象
 6.ForkingTCPServer             ForkingMinIn與TCPServer的組合
 7.ForkingUDPServer             ForkingMinIn與UDPServer的組合
 8.BaseRequestHandler       
 9.StreamRequestHandler           TCP請(qǐng)求處理類的一個(gè)實(shí)現(xiàn)
 10.DataStreamRequestHandler         UDP請(qǐng)求處理類的一個(gè)實(shí)現(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)容,你們對(duì)python中操作socketserver的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標(biāo)題:python中操作socketserver的方法
標(biāo)題路徑:http://muchs.cn/article44/isjdee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信小程序外貿(mào)網(wǎng)站建設(shè)、面包屑導(dǎo)航、用戶體驗(yàn)、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管