IO多路復用

2022-08-26 14:30:32 字數 876 閱讀 1052

#基於poll的io多路復用

from socket import *

import select

s = socket()

s.setsockopt(sol_socket,so_reuseaddr,1)

s.bind(('172.60.50.218',9999))

s.listen(5)

#以每個io物件的fileno為鍵,io物件為值

fdmap =

#建立poll物件

p = select.poll()

#新增關注的io

p.register(s)

while true:

#監控關注的io

events = p.poll()

for fd,event in events:

if fd == s.fileno():

c,addr = fdmap[fd].accept()

print("connect from ",addr)

#將客戶端套接字新增關注並新增到字典

p.register(c)

fdmap[c.fileno()] = c

elif event & select.pollin:

data = fdmap[fd].recv(1024).decode()

#如果客戶端退出則不在關注,並且從字典移除

if not data:

p.unregister(fd)

del fdmap[fd]

else:

print(data)

fdmap[fd].send('收到你的訊息'.encode())

s.close()

I O多路復用

一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...

i o多路復用

最常見的i o多路復用就是 select poll epoll了,下面說說他們的一些特點和區別吧。select 可讀 可寫 異常三種檔案描述符集的申明和初始化。fd set readfds,writefds,exceptionfds fd zero readfds fd zero writefds ...

I O多路復用

我們都知道unix like 世界裡,一切皆檔案,而檔案是什麼呢?檔案就是一串二進位製流而已,不管socket,還是fifo 管道 終端,對我們來說,一切都是檔案,一切都是流。在資訊 交換的過程中,我們都是對這些流進行資料的收發操作,簡稱為i o操作 input and output 往流中讀出資料...