監聽之後,
我們要看看有沒有client連進來,
有的話要進行握手並accept,
我們先建立一個run的自訂函數供後面呼叫,
而聊天室必須要一直循環監聽是否有使用者輸入訊息,
所以我們必須要用迴圈的方式呈現,
//對創建的socket循環進行監聽,處理數據
function run(){
//循環,直到socket斷開
while(true){
//do some
}
}
socket_select($sockets, $write = NULL, $except = NULL, NULL) 這個函數是同時接受多個連接的關鍵,
$sockets可以理解為一個數組,這個數組中存放的是文件描述符。當它有變化(就是有新消息到或者有客户端連接/斷開)时,socket_select函數才會返回,繼續往下執行。
$write是監聽是否有客户端寫數據,傳入NULL是不關心是否有寫變化。
$except是$sockets裡面要被排除的元素,傳入NULL是”監聽”全部。
最後一個參數是超時時間 如果為0:則立即结束
如果為n>1: 則最多在n秒後结束,如遇某一個連接有新動態,則提前返回
如果為null:如遇某一個連接有新動態,則返回
//對創建的socket循環進行監聽,處理數據
function run(){
//循環,直到socket斷開
while(true){
socket_select($changes,$write,$except,NULL);
//循環取client傳過來的資料
foreach($changes as $sock){
//如果有新的client連接進來,則
if($sock==$this->master){
//do some
}else{
//do some
}
}
}
}
剩下的下章繼續~~感溫大家