接續上一篇,
還沒處理完傳送訊息的部分,
之後會用到4個自訂函數
woshou()-握手用
send()
send1()
send2()
先來說握手的部分,
握手必須照協議组合進行訊息返回,
有些程式語言不需要自己建立就有內建,
而這邊我們是自己處理,
websocket握手的介紹前面篇章說過就不再提,
實做如下:
/*
* 函數說明:對client的請求進行回應,即握手操作
* @$k clien的socket對應的鍵,即每個用戶有唯一$k並對應socket
* @$buffer 接收client請求的所有訊息
*/
function woshou($k,$buffer){
//截取Sec-WebSocket-Key的值並加密
$buf = substr($buffer,strpos($buffer,'Sec-WebSocket-Key:')+18);
$key = trim(substr($buf,0,strpos($buf,"\r\n")));
$new_key = base64_encode(sha1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true));
//按照協議组合訊息進行返回
$new_message = "HTTP/1.1 101 Switching Protocols\r\n";
$new_message .= "Upgrade: websocket\r\n";
$new_message .= "Sec-WebSocket-Version: 13\r\n";
$new_message .= "Connection: Upgrade\r\n";
$new_message .= "Sec-WebSocket-Accept: " . $new_key . "\r\n\r\n";
socket_write($this->users[$k]['socket'],$new_message,strlen($new_message));
//對已經握手的client做標記
$this->users[$k]['shou']=true;
return true;
}
剩下三個我們下一篇章談~