最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于python socketserver框架全面解析

 更新時間:2017年09月21日 08:24:19   作者:又見阿郎  
下面小編就為大家?guī)硪黄趐ython socketserver框架全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

socketserver框架是一個基本的socket服務(wù)器端框架, 使用了threading來處理多個客戶端的連接, 使用seletor模塊來處理高并發(fā)訪問, 是值得一看的python 標準庫的源碼之一

對于select網(wǎng)絡(luò)框架的理解可以看 << 基于python select.select模塊通信的實例講解 >>。socketserver框架采用了selector框架來供你選擇相適應(yīng)的網(wǎng)絡(luò)通信框架, 比如select, poll, epoll等。有了這些網(wǎng)絡(luò)框架我們就能處理高并發(fā)的網(wǎng)絡(luò)訪問了.

先看看示例代碼吧:

# coding: utf-8
import socketserver


class MyTCPHandler(socketserver.BaseRequestHandler):
 """
 The request handler class for our server.
 It is instantiated once per connection to the server, and must
 override the handle() method to implement communication to the
 client.
 """

 def handle(self):
  # self.request is the TCP socket connected to the client
  self.data = self.request.recv(1024).strip()
  print("{} wrote:".format(self.client_address[0]))
  print(self.data)
  # just send back the same data, but upper-cased
  self.request.sendall(self.data.upper())


if __name__ == "__main__":
 HOST, PORT = "localhost", 9999

 # Create the server, binding to localhost on port 9999
 # 如果子類沒有某個方法或是屬性, 就回去父類中調(diào)用
 with socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) as server:
  # Activate the server; this will keep running until you
  # interrupt the program with Ctrl-C
  server.serve_forever()

客戶端:

# coding: utf-8
import socket


sk = socket.socket()
sk.connect(("127.0.0.1", 9999)) # 主動初始化與服務(wù)器端的連接
while True:
 send_data = input("輸入發(fā)送內(nèi)容:")
 sk.sendall(bytes(send_data, encoding="utf8"))
 if send_data == "byebye":
  break
 accept_data = str(sk.recv(1024), encoding="utf8")
 print("".join(("接收內(nèi)容:", accept_data)))
sk.close()

我們創(chuàng)建一個繼承自BaseRequestHandler類的TCP請求處理類, 說白了這個類就是我們自己封裝的基于socket的recv()函數(shù)與send()函數(shù)的類, 而所謂的TCP請求處理類其實就是對socket服務(wù)器端的bind, listen, accept等處理的封裝類, 而且這個封裝的并不是簡單的socket, 而是基于select或是epoll等網(wǎng)絡(luò)框架的類, 我們調(diào)用這個類就能輕易地處理高并發(fā)的網(wǎng)絡(luò)訪問. 其實認真閱讀源碼, 你會發(fā)現(xiàn)整體的程序設(shè)計是基于事件驅(qū)動的, 事件驅(qū)動機制的三個要素: 消息(事件)隊列, 消息(事件)觸發(fā), 事件循環(huán)。只不過socketserver框架的事件驅(qū)動機制就做到了socket的accept()方法那, 接下來的消息接受(recv)與發(fā)送(send)就沒有在做封裝成相應(yīng)的事件來進行處理了。

在這里說一個要注意的地方, 我使用了ThreadingTCPServer()類響應(yīng)多個客戶端的連接, 但是當我閱讀這個類的源碼的時候, 表示很疑惑??!

class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass

這讓我很疑惑啊,再看看調(diào)用:

with socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) as server:
  # Activate the server; this will keep running until you
  # interrupt the program with Ctrl-C
  server.serve_forever()

這更疑惑, ThreadingTCPServer哪來的構(gòu)造函數(shù), 后來研究了一下, 原來當子類的某個函數(shù)或是屬性發(fā)生調(diào)用時, 如果不是重載了父類的方法或是屬性, 而且子類中沒有這個方法或是屬性, 就會去調(diào)用父類相對應(yīng)的方法或是屬性, 于是上面的就是調(diào)用了TCPServer的初始化函數(shù)__init__以及serve_forever(), 隨后調(diào)用的是子類的Request_handler函數(shù)

程序結(jié)果:

以上這篇基于python socketserver框架全面解析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pandas dataframe拼接后index重新排序方式

    pandas dataframe拼接后index重新排序方式

    這篇文章主要介紹了pandas dataframe拼接后index重新排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Python中ModuleNotFoundError錯誤的問題解決

    Python中ModuleNotFoundError錯誤的問題解決

    本文主要介紹了Python中ModuleNotFoundError錯誤的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 使用Python進行自動化部署詳解

    使用Python進行自動化部署詳解

    在軟件開發(fā)和運維領(lǐng)域,自動化部署是一個至關(guān)重要的環(huán)節(jié),本文將介紹如何使用Python進行自動化部署,并提供代碼實例來說明,希望對大家有所幫助
    2024-04-04
  • pytorch MSELoss計算平均的實現(xiàn)方法

    pytorch MSELoss計算平均的實現(xiàn)方法

    這篇文章主要介紹了pytorch MSELoss計算平均的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 詳解python中DRF框架的數(shù)據(jù)校驗方式

    詳解python中DRF框架的數(shù)據(jù)校驗方式

    這篇文章主要為大家詳細介紹了python中DRF框架的數(shù)據(jù)校驗方式,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-10-10
  • python字符串運算符詳情

    python字符串運算符詳情

    這篇文章主要介紹了 python字符串運算符詳情,在編程里,用的最多的就是字符串,字符串同時也是各類數(shù)據(jù)的中轉(zhuǎn)站,下文基于python的相關(guān)資料介紹字符串運算符,需要的小伙伴可以參考一下
    2022-04-04
  • Python中使用filter過濾列表的一個小技巧分享

    Python中使用filter過濾列表的一個小技巧分享

    這篇文章主要介紹了Python中使用filter過濾列表的一個小技巧分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 用python實現(xiàn)海龜賽跑小游戲

    用python實現(xiàn)海龜賽跑小游戲

    大家好,本篇文章主要講的是用python實現(xiàn)海龜賽跑小游戲,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法詳解

    Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法詳解

    這篇文章主要介紹了Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法,結(jié)合實例形式詳細分析了Python爬蟲爬取網(wǎng)頁數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python callable()函數(shù)用法實例分析

    Python callable()函數(shù)用法實例分析

    這篇文章主要介紹了Python callable()函數(shù)用法,結(jié)合實例形式分析了Python callable()函數(shù)的功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-03-03

最新評論

宁阳县| 宜兰县| 彭山县| 花莲市| 武平县| 赤水市| 三原县| 宁晋县| 灌云县| 佛山市| 顺平县| 蓝田县| 武平县| 苏尼特左旗| 多伦县| 新田县| 贡觉县| 曲麻莱县| 雷州市| 荔浦县| 肇州县| 平陆县| 乐陵市| 涟源市| 绍兴市| 长武县| 固安县| 凌云县| 沧源| 郯城县| 伽师县| 辽源市| 新龙县| 长兴县| 济源市| 喀什市| 通榆县| 桐柏县| 新干县| 岳西县| 泌阳县|