日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么

瀏覽:24日期:2022-06-22 11:32:09
疑問

Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么

在調用socket的時候,我們會使用到listen()函數(shù),里面有個參數(shù)叫backlog, 例如:socket.listen(5). 那么這個數(shù)字5到底代表什么意思呢?網(wǎng)上有很多種說法,講的都是概念,很多都是復制粘貼,容易讓人誤解。

解答

下面使用具體的代碼片段來講解:

這是一個電腦本機模擬客服端及服務端的程序,主要功能是建立socket連接后,客戶端輸入關鍵字查詢對應的段子,服務器端返回結果。服務器可以滿足同時服務兩個客戶的查詢操作此程序中還包含了信號量和多線程

Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么

以listen(1),參數(shù)設置為1進行講解,是不是將參數(shù)設置為1后,開啟3個客服連接就會報錯呢?并不是!

如下圖所示:

Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么

那么問題來了!

問題1:

如上例代碼中,有l(wèi)isten(1),這個1是指什么?只能與1個socket建立鏈接嗎? 為什么我用上面的代碼可以創(chuàng)建大于1個的tcp連接卻沒報錯,如果用網(wǎng)上其他人的說法理論上大于1個連接應該報錯的!

因為:listen(n)傳入的值, n表示的是服務器拒絕(超過限制數(shù)量的)連接之前,操作系統(tǒng)可以掛起的最大連接數(shù)量。n也可以看作是'排隊的數(shù)量'

問題2:

既然沒有報錯,為什么沒有打印用戶3的地址?

因為:服務器正在處理用戶1和用戶2,沒有空閑去接待用戶3,所以用戶3去排隊了。

問題3:

為什么服務器能同時處理用戶1和用戶2?

因為:

Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么

這里用到了多線程和信號量,信號量設置為2,也就是允許并發(fā)數(shù)為2,服務器開啟了兩個線程,能同時分別處理用戶1和用戶2。

總結

socket.listen(n)

簡單來說,這里的nt表示socket的”排隊個數(shù)

一般情況下,一個進程只有一個主線程(也就是單線程),那么socket允許的最大連接數(shù)為: n + 1如果服務器是多線程,比如上面的代碼例子是開了2個線程,那么socket允許的最大連接數(shù)就是: n + 2換句話說:排隊的人數(shù)(就是那個n) + 正在就餐的人數(shù)(服務器正在處理的socket連接數(shù)) = 允許接待的總人數(shù)(socket允許的最大連接數(shù))

補充:關于Socket.listen方法的一點體悟

前言

最近在接觸Socket的的時候,關于其中的listen方法感到不解,于是對其進行了一番研究,得出了一點體悟,特此記錄。

詳解

讓我們先來看看listen方法在Python3.6文檔說明:

socket.listen([backlog])

Enable a server to accept connections. If backlog is specified, it must be at least 0 (if it is lower, it is set to 0); it specifies the number of unaccepted connections that the system will allow before refusing new connections. If not specified, a default reasonable value is chosen.

啟用服務器以接受連接。如果指定backlog,則必須至少為0(如果低于0,則設置為0);它指定系統(tǒng)在拒絕新連接之前將允許的未接受連接的數(shù)量。如果未指定,則選擇默認的合理值。

Changed in version 3.5: The backlog parameter is now optional.

在版本3.5中已更改: backlog參數(shù)現(xiàn)在是可選的。

起初我看了這說明想當然的以為是可以接入的Client上限,不過實踐過后發(fā)現(xiàn)并非如此。在網(wǎng)上找的解答基本上就是文檔所言的復述,后來請教了專業(yè)人士后,方知這涉及到Socket的底層知識。

在了解listen方法之前,首先我們需要了解connect方法和accept方法,以下是文檔說明:

socket.connect(address)

Connect to a remote socket at address. (The format of address depends on the address family — see above.)

在地址連接到遠程套接字。(地址的格式取決于地址系列 - 請參見上文)

If the connection is interrupted by a signal, the method waits until the connection completes, or raise a socket.timeout on timeout, if the signal handler doesn’t raise an exception and the socket is blocking or has a timeout. For non-blocking sockets, the method raises an InterruptedError exception if the connection is interrupted by a signal (or the exception raised by the signal handler).

如果連接被信號中斷,則該方法等待直到連接完成,或者如果信號處理程序沒有引發(fā)異常并且套接字正在阻塞或者已經(jīng)阻塞,則在超時時引入socket.timeout超時。對于非阻塞套接字,如果連接被信號中斷(或由信號處理程序引發(fā)的異常),則該方法引發(fā)InterruptedError異常。

Changed in version 3.5: The method now waits until the connection completes instead of raising an InterruptedError exception if the connection is interrupted by a signal, the signal handler doesn’t raise an exception and the socket is blocking or has a timeout (see the PEP 475 for the rationale).

在版本3.5中已更改:該方法現(xiàn)在等待直到連接完成,而不是提高InterruptedError異常,如果連接被信號中斷,信號處理程序不引發(fā)異常,套接字阻塞或超時(參見 PEP 475)。

socket.accept()

Accept a connection. The socket must be bound to an address and listening for connections. The return value is a pair (conn, address) where conn is a new socket object usable to send and receive data on the connection, and address is the address bound to the socket on the other end of the connection.

接收一個連接.該socket 必須要綁定一個地址和監(jiān)聽連接.返回值是一對(conn, 地址)其中conn是新 t4 > socket對象可用于在連接上發(fā)送和接收數(shù)據(jù),address是連接另一端的套接字的地址。

The newly created socket is non-inheritable.

新創(chuàng)建的套接字non-inheritable。

Changed in version 3.4: The socket is now non-inheritable.

在版本3.4中更改:套接字現(xiàn)在是不可繼承的。

Changed in version 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

在版本3.5中更改:如果系統(tǒng)調用中斷并且信號處理程序沒有引發(fā)異常,則此方法現(xiàn)在重試系統(tǒng)調用,而不是引發(fā)InterruptedError異常 PEP 475)。

相比listen方法,它倆就好理解多了,一個是Client用于連接Server的方法,一個是Server用于接收Client的連接申請的方法。

但事實上accept方法一次只能接收一個Client的連接申請,而Client則是多個的,這樣Socket會設計一個隊列來存儲Client的連接申請則是理所當然的。于是accept便從這個隊列里提取首位成員處理即可。

以下是示意圖:

Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么

如此便很清晰了,backlog參數(shù)的含義便是這個隊列的最大值,也就是同時受理連接申請的最大值。關于backlog該設置為多少,從Skynet得到的參考為32。如果滿了便需要Client重新connect。以上listen方法之謎便解開了。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
香蕉成人久久| 久久国产高清| 国产日韩一区| 麻豆国产欧美一区二区三区 | 国产精品v亚洲精品v日韩精品| 亚洲人成亚洲精品| 美女精品网站| 国产无遮挡裸体免费久久 | 亚洲精品美女91| 日本午夜精品久久久久| 欧美激情五月| 另类中文字幕国产精品| 99riav1国产精品视频| 亚洲涩涩av| 国产精品探花在线观看| 美女视频黄 久久| 99久久夜色精品国产亚洲1000部| 国产精品老牛| 欧美亚洲免费| 久久久一二三| 免费精品视频最新在线| 国产精品亚洲产品| 成人羞羞视频播放网站| 日本欧美在线看| 狠狠久久伊人| 丝袜a∨在线一区二区三区不卡| 国产精品久久久久久久久久齐齐 | 青草综合视频| 91看片一区| 免播放器亚洲一区| 久久久91麻豆精品国产一区| 激情自拍一区| 国产精品主播| 99热精品在线| 精品国产一级| 首页亚洲欧美制服丝腿| 精品免费视频| 亚洲精品系列| 国产在线欧美| 国产精品2区| 中文在线不卡| 国际精品欧美精品| 美国三级日本三级久久99 | 亚洲日韩视频| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 成人污污视频| 亚洲一区二区三区中文字幕在线观看| 国产精品分类| 好看的av在线不卡观看| 国产福利一区二区精品秒拍| 影音先锋国产精品| 国产91在线精品| 热久久久久久久| 日韩黄色大片| 国产精区一区二区| 蜜臀久久99精品久久久久久9| 日韩国产欧美一区二区| 欧美久久香蕉| 一级欧美视频| 亚洲少妇在线| 激情丁香综合| 日韩视频网站在线观看| 国产欧美日韩一级| 久久午夜精品一区二区| 亚洲成人不卡| 高清不卡一区| 国产精品午夜av| 日韩福利视频导航| 亚洲精品第一| 老司机精品久久| 婷婷成人在线| 国产资源在线观看入口av| 日本综合视频| 亚洲欧美在线综合| 视频一区二区中文字幕| 亚洲欧洲一区| 国产婷婷精品| 国产一区二区高清| 久久天堂成人| 亚洲黄色网址| 国产精品专区免费| 国模大尺度视频一区二区| 国产精品永久| 欧美日韩伊人| 国产伦精品一区二区三区千人斩| 亚洲精品日本| 少妇精品久久久一区二区 | 欧美一区=区| 一区二区视频欧美| 美女毛片一区二区三区四区| 日韩精品一区二区三区免费观看| 国产精品久久国产愉拍| 欧美日韩1区2区3区| 久久国产精品免费一区二区三区| 日韩不卡一区二区三区| 亚洲精品国产日韩| 日韩一区网站| 欧美在线91| 91九色综合| 久久超碰99| 国产成人精品一区二区三区在线| 久久不见久久见免费视频7| 国产极品模特精品一二| 精品无人区麻豆乱码久久久| 久久久久久色 | 日韩精品国产精品| 日本欧美一区二区在线观看| 国产探花在线精品| 久久精品亚洲| 国产精品久久久久av电视剧| 久久精品中文| 亚洲一区二区成人| 日本综合视频| 欧美激情aⅴ一区二区三区 | 99国产精品久久久久久久成人热 | 国产精品久久久久久久久妇女| 日韩在线第七页| 午夜久久美女| 天堂av一区| 国产一区二区三区亚洲综合| 中文另类视频| 免费在线看一区| 国产欧美日韩| 91tv亚洲精品香蕉国产一区| 六月婷婷一区| 欧美激情99| 久久精品青草| 一区二区电影在线观看| 麻豆高清免费国产一区| 亚洲二区视频| 午夜久久av| 亚洲女同av| 日韩一二三区在线观看| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产精品久久亚洲不卡| 日韩在线二区| 亚洲日本欧美| www.九色在线| 午夜日韩av| 麻豆精品新av中文字幕| 一级欧洲+日本+国产| 日本视频一区二区| 成人啊v在线| 日本久久一区| 久久精品动漫| 国产精品久久久久久模特| 久久蜜桃av| 久久国产人妖系列| 亚洲国产不卡| 国语对白精品一区二区| 老司机精品久久| 天堂中文在线播放| 亚洲精品无吗| av高清不卡| 青草综合视频| 91成人超碰| 日本精品黄色| 日韩av电影一区| 欧美日韩视频| av中文资源在线资源免费观看| 蜜桃视频一区二区三区 | 日本欧美久久久久免费播放网| 成人美女视频| 国产亚洲欧美日韩在线观看一区二区 | 中文无码日韩欧| 日韩激情一区| 国产毛片精品| 亚洲精品韩国| 国产精品免费看| 青青久久av| 国产videos久久| 国产精品视频一区二区三区综合 | 亚洲一级大片| re久久精品视频| caoporn视频在线| 欧美黑人做爰爽爽爽| 日韩有码av| 麻豆久久精品| 欧美日韩三区| 99精品在线观看| 亚洲国产福利| 精品高清久久| 美女视频黄免费的久久| 日韩动漫一区| 色综合视频一区二区三区日韩 | 国产一区 二区| 蜜臀国产一区二区三区在线播放| 久久九九国产| 日韩欧美少妇| 色网在线免费观看| 精品成人18| 久久中文字幕一区二区三区| 欧美日韩亚洲三区| 日韩国产欧美在线播放| 日韩综合小视频| 亚洲精品影视| 亚洲午夜久久| 亚洲另类av| 亚洲免费福利一区| 亚洲精品系列|