日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 网络编程_Python网络编程(六)

發(fā)布時(shí)間:2024/4/14 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 网络编程_Python网络编程(六) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

回顧

在《Python進(jìn)階記錄之網(wǎng)絡(luò)編程(五)》中,我們介紹了如何利用TCP服務(wù)端和客戶端實(shí)現(xiàn)一個(gè)簡單的點(diǎn)對(duì)點(diǎn)聊天,區(qū)別基于TCP協(xié)議和UDP協(xié)議的不同之處。今天我們講一下如何利用多進(jìn)程和多線程的知識(shí)來創(chuàng)建多進(jìn)程服務(wù)端和多線程服務(wù)端。

單進(jìn)程堵塞服務(wù)端

不論是基于TCP協(xié)議還是UDP協(xié)議,我們之前創(chuàng)建的服務(wù)端程序都是單進(jìn)程堵塞式的服務(wù)端,具體表現(xiàn)為同一時(shí)刻只能接收一個(gè)客戶端連接,當(dāng)有客戶端連接時(shí),此時(shí)服務(wù)端無法再接收其他客戶端的連接請(qǐng)求。

我們以基于TCP協(xié)議的服務(wù)端程序?yàn)槔?#xff0c;創(chuàng)建一個(gè)TCP服務(wù)端。代碼與我們之前介紹的基本一致,具體如下。

TCP服務(wù)端程序

創(chuàng)建好TCP服務(wù)端程序后,我們利用sokit網(wǎng)絡(luò)通信調(diào)試助手打開兩個(gè)客戶端,IP設(shè)置為本機(jī)IP,端口號(hào)與服務(wù)端程序綁定的端口號(hào)保持一致,為“6666”。

設(shè)置兩個(gè)客戶端

現(xiàn)在我們運(yùn)行剛剛創(chuàng)建好的TCP服務(wù)端,然后將sokit設(shè)置的兩個(gè)客戶端都點(diǎn)擊TCP Connect按鈕,進(jìn)行連接嘗試。

單進(jìn)程堵塞式服務(wù)端接受連接

可以看到,單進(jìn)程堵塞式的服務(wù)端只能同時(shí)接受一個(gè)客戶端的連接請(qǐng)求,一旦有一個(gè)客戶端成功連接后,服務(wù)端就堵塞了,此時(shí)其他客戶端無法再成功連接。只有當(dāng)前客戶端關(guān)閉連接,服務(wù)端才能重新接受其他客戶端的連接。

多進(jìn)程服務(wù)端

單進(jìn)程堵塞式的服務(wù)端由于在處理連接的過程中,無法接受其他客戶端的連接,因此只能同時(shí)接受一個(gè)客戶端的連接請(qǐng)求。我們可以利用多進(jìn)程的知識(shí)點(diǎn)為每個(gè)連接都創(chuàng)建新的進(jìn)程,這樣,服務(wù)端就擁有同時(shí)處理客戶端連接的能力了。

我們將處理連接的代碼單獨(dú)提取處理,包裝成函數(shù),然后使用Python的multiprocessing模塊來創(chuàng)建進(jìn)程。為了防止端口被占用,我們綁定新的端口“12345”。

多進(jìn)程TCP服務(wù)端程序

在創(chuàng)建進(jìn)程時(shí),Python會(huì)向子進(jìn)程中copy一份當(dāng)前連接的客戶端套接字,因此我們可以在父進(jìn)程中關(guān)閉該套接字。

我們運(yùn)行該多進(jìn)程TCP服務(wù)端程序,并仍然利用sokit設(shè)置的兩個(gè)客戶端,將Port修改為服務(wù)端綁定的端口“12345”,點(diǎn)擊TCP Connect按鈕,進(jìn)行連接嘗試。

多進(jìn)程服務(wù)端接受連接

可以看到,與單進(jìn)程堵塞時(shí)服務(wù)端不同的是,多進(jìn)程服務(wù)端程序可以同時(shí)接受多個(gè)客戶端的連接,并且相互之前不受影響。

多線程服務(wù)端

通過為每個(gè)客戶端創(chuàng)建一個(gè)進(jìn)程的方式,我們成功讓服務(wù)端程序能夠同時(shí)為多個(gè)客戶端進(jìn)行服務(wù)。但是,我們?cè)诮榻B多進(jìn)程知識(shí)點(diǎn)的時(shí)候提到過,如果創(chuàng)建的進(jìn)程過多,例如這里我們?nèi)绻谐汕先f個(gè)客戶端要連接時(shí),那么創(chuàng)建那么多進(jìn)程需要耗費(fèi)較大的資源。

除了多進(jìn)程,我們還可以使用多線程,只要為每個(gè)連接開辟一個(gè)新線程進(jìn)行處理,也能夠讓服務(wù)端程序同時(shí)為多個(gè)客戶端進(jìn)行服務(wù)。

我們?nèi)匀粚⑻幚磉B接的代碼單獨(dú)提取處理,包裝成函數(shù),然后使用Python的threading模塊來創(chuàng)建子線程。

多線程TCP服務(wù)端程序

代碼基本與多進(jìn)程服務(wù)端程序相同,不同的是一個(gè)創(chuàng)建進(jìn)程,一個(gè)創(chuàng)建線程。此外,我們?cè)诮榻B線程的相關(guān)知識(shí)點(diǎn)時(shí)提到過,線程間是會(huì)共享變量的,因此,我們不能像多進(jìn)程服務(wù)端那樣在父進(jìn)程中關(guān)閉當(dāng)前連接客戶端的套接字。

同樣地,多線程服務(wù)端程序可以同時(shí)接受多個(gè)客戶端的連接,并且相互之前不受影響。

總結(jié)

以上內(nèi)容介紹了如何利用多進(jìn)程和多線程的知識(shí)來創(chuàng)建多進(jìn)程服務(wù)端和多線程服務(wù)端,需要重點(diǎn)掌握多進(jìn)程服務(wù)端和多線程服務(wù)端程序的寫法,理解引入多進(jìn)程和多線程的原因。感謝大家的支持與關(guān)注,歡迎一起學(xué)習(xí)交流~

總結(jié)

以上是生活随笔為你收集整理的python 网络编程_Python网络编程(六)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。