iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
0
自我挑戰組

挑戰30天完成PHP聊天室範例系列 第 22

[Day22]第二一章-盤古開天(九)-WEBSOCKET SERVER端(3)

監聽之後,
我們要看看有沒有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
            }
         }
    }
}

剩下的下章繼續~~感溫大家


上一篇
[Day21]第二十章-盤古開天(八)-WEBSOCKET SERVER端(2)
下一篇
[Day23]第二十二章-盤古開天(十)-WEBSOCKET SERVER端(4)
系列文
挑戰30天完成PHP聊天室範例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言