PHP socket 多路復用 select方式

2021-09-12 09:22:16 字數 1379 閱讀 5927

多路是指多個客戶端連線socket,復用就是指復用少數幾個程序,多路復用本身依然隸屬於同步通訊方式,只是表現出的結果看起來像非同步,這點值得注意.目前多路復用有三種常用的方案,依次是:

select,最早的解決方案

poll,算是select的公升級版

epoll,目前的最終解決版,解決c10k問題的功臣

隨著網際網路的普及,應用的使用者群體幾何倍增長,此時伺服器效能問題就出現。最初的伺服器是基於程序/執行緒模型。新到來乙個tcp連線,就需要分配乙個程序。假如有c10k,就需要建立1w個程序,可想而知單機是無法承受的。那麼如何突破單機效能是高效能網路程式設計必須要面對的問題,進而這些侷限和問題就統稱為c10k問題

// begin 建立乙個tcp socket伺服器

$host = '0.0.0.0';

$port = 9999;

$listen_socket = socket_create( af_inet, sock_stream, sol_tcp );

socket_bind( $listen_socket, $host, $port );

socket_listen( $listen_socket );

// end 建立伺服器完畢

echo '我啟動了';

// 也將監聽socket放入到read fd set中去,因為select也要監聽listen_socket上發生事件

$client = [ $listen_socket ];

// 先暫時只引入讀事件,避免有同學暈頭

$write = ;

$exp = ;

// 開始進入迴圈

while( true )

// 檢視去除listen_socket中是否還有client_socket

if( count( $read ) > 0 )}}

}}// 當select沒有監聽到可操作fd的時候,直接continue進入下一次迴圈

else

}

效果

Linux IO多路復用

一.select 函式 include include include int select int n,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout fd clr int fd,fd set set f...

I O多路復用

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

Linux C Socket多路復用

1.迴圈伺服器 udp伺服器 udp迴圈伺服器的實現非常簡單 udp伺服器每次從套接字上讀取乙個客戶端的請求,處理,然後將結果返回給客戶機.可以用下面的演算法來實現.socket bind while 1 因為udp是非面向連線的,沒有乙個客戶端可以老是佔住服務端.只要處理過程不是死迴圈,伺服器對於...