IO多路復用

来源:https://www.cnblogs.com/Gluneko/archive/2018/08/29/9556882.html
-Advertisement-
Play Games

IO多路復用實現併發伺服器 IO多路復用技術 我們把socket交給操作系統去監控 epoll 是惰性的事件回調:惰性事件回調 是由用戶進程 自己調用的,操作系統只起到 通知的作用,目前Linux上效率最高的 IO多路復用 技術。 併發服務實現: 服務端 客戶端 ...


IO多路復用實現併發伺服器

IO多路復用技術

我們把socket交給操作系統去監控

epoll 是惰性的事件回調:惰性事件回調 是由用戶進程 自己調用的,操作系統只起到 通知的作用,目前Linux上效率最高的 IO多路復用 技術。

併發服務實現:

服務端

import socket
import selectors#IO多路選擇器模塊,使用IO多路復用無需設置非阻塞

epoll_selector = selectors.EpollSelector()#用來和epoll通信的選擇器,調用epoll

server = socket.socket()
server.bind(('0.0.0.0',8080))
server.listen(1000)



def read(connection):

    recv_data = connection.recv(1024)
    if recv_data:
        print(recv_data)
        connection.send(recv_data)
    else:
        epoll_selector.unregister(connection)#數據發送完畢,取消註冊無需監控
        connection.close()


def accept(server):
    connection,remote_address = server.accept()
    #要準備收數據
    epoll_selector.register(connection,selectors.EVENT_READ,read)

epoll_selector.register(server,selectors.EVENT_READ,accept)#連接過來可讀的時候在server上註冊事件,accept是回調函數
#事件迴圈(主動去問epoll哪些socket可以回調,如果有了,就回調他們)
while True:
    event = epoll_selector.select()#查詢所有已經準備好的事件,返回一個列表{{二元組列表}}
    for key,mask in event:
        callback = key.data#從key裡面把回調函數拿出來
        sock = key.fileobj#從key裡面把我們註冊的那個socket拿出來
        callback(socket)#回調

客戶端

import socket
host = '192.168.215.128'
port = 8080
client = socket.socket()
client.connect((host,port))
# client.send(b'haha')
msg = input('-->')
client.send(msg.encode('utf-8'))
recv_data = client.recv(1024)
print(recv_data.decode('utf-8'))
client.close()

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #以下是我自己在聯繫列表中所編寫的語句:names=["zangsan",'lisi','wangermazi','Xiaoliuzi','dabiaoge','牛erbiaodi']# 0 1 2 3 4 5 print(names[2])#簡單取值#取lisi和wangermaziprint(n ...
  • 11種狀態解析 LISTEN 等待從任何遠端TCP 和埠的連接請求。 SYN_SENT 發送完一個連接請求後等待一個匹配的連接請求。 SYN_RECEIVED 發送連接請求並且接收到匹配的連接請求以後等待連接請求確認。 ESTABLISHED 表示一個打開的連接,接收到的數據可以被投遞給用戶。連接 ...
  • 剛剛開始學習c++。之前c的內容掌握的也不多,基本只是一本概論課的程度,以前使用c的struct寫過的鏈表、用python寫過簡單的數據結構,就試著把兩者用c++寫出來,也是對c++的class,以及繼承中的public/protected/private的性質進行初步瞭解。第一次寫頭文件.h和源文 ...
  • ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是一套基於拉丁字母的字元編碼,共收錄了 128 個字元,用一個位元組就可以存儲,它等同於國際標準 ISO/IEC 646。ASCII 規範於 1967 年第一次發佈, ...
  • Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 48605 Accepted: 18339 Description You are trapped in a 3D dungeon and need t ...
  • 前幾天決定學Python,上網找了教程看了兩天,和C比起來面向對象的特性真的都很便捷,有了類開發各種敵機,子彈什麼的都很方便。 在此要感謝開發pygame模塊的開發人員,真的很好用(逃 主函數↓ 精靈類模塊 ...
  • 位元組碼指令集是瞭解學習虛擬機運行的必須步驟,本文詳細的介紹了絕大多數的位元組碼指令,從多個維度對位元組碼指令進行瞭解析說明,並且對位元組碼指令集助記符進行了更加詳細的釋義. 本文主要涉及jvm的位元組碼指令集 助記符 位元組碼邏輯功能分類 以及用法 ...
  • 1 //php隨機生成漢字 $num為生成漢字的數量 2 public function getChar($num){ 3 $b = ''; 4 for ($i=0; $i<$num; $i++) { 5 // 使用chr()函數拼接雙位元組漢字,前一個chr()為高位位元組,後一個為低位位元組 6 ..... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...