您好,登錄后才能下訂單哦!
這篇文章主要介紹“php如何搭建websocket環境”,在日常操作中,相信很多人在php如何搭建websocket環境問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”php如何搭建websocket環境”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
php搭建websocket環境的方法:1、在php.ini文件中找到sockets擴展并將其前面的分號刪除;2、將http升級為websocket;3、配置環境變量,將PHP安裝路徑添加到Path中;4、在cmd輸入“php Path”即可。
PHP創建websocket服務端
創建這個服務端需要先開啟sockets擴展,沒有開啟的話,無論如何都會報錯
只需要在php.ini文件中找到sockets擴展并將其前面的分號刪除能將其開啟
開啟前:
;extension=sockets
開啟后:
開啟完畢,接下來我們就可以進入正題了;首先,我們了解幾個函數:extension=sockets
socket_create(AF_INET, SOCK_STREAM, SOL_TCP);//用于創建套接字
socket_bind( $this->master,$ip,$port);//用于綁定ip和端口
socket_listen( $this->master,1000);//用于調用connect連接的套接字和監聽相關端口
socket_accept($this->master);//負責握手連接
socket_recv($socket, $buffer, 1024, 0);//從已連接的socket(客戶端)接收數據
socket_write($socket,$upgrade,strlen($upgrade));//給單獨客戶端發送數據
send($message)//發送數據
socket_close($socket);//斷開連接
很多步驟和PHP創建socket差不多,
不同主要在于socket_write使用和數據需要解、封幀,我們需要將http升級為websocket
http升級為websocket
if(preg_match("/Sec-WebSocket-Key: (.*)\r\n/",$buffer,$match)){
$responseKey=base64_encode(sha1($match[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',true));
$upgrade="HTTP/1.1 101 Switching Protocol\r\n".
"Upgrade: websocket\r\n".
"Connection: Upgrade\r\n".
"Sec-WebSocket-Accept:".$responseKey."\r\n\r\n";
socket_write($socket,$upgrade,strlen($upgrade));
}
$socket是我們創建的連接,$buffer是客戶端第一次連接時發送的數據
注意:Sec-WebSocket-Key: (.*)//括號和冒號之間是要有空格的
解幀
$len=$masks=$data=$decoded=null;
$len=ord($buffer[1]) & 127;
if($len === 126){
$masks=substr($buffer,4,4);
$data=substr($buffer, 8);
}else if($len === 127){
$masks=substr($buffer,10,4);
$data=substr($buffer, 14);
}else{
$masks=substr($buffer,2,4);
$data=substr($buffer, 6);
}
for($index = 0;$index<strlen($data);$index++){
$decoded.=$data[$index] ^ $masks[$index % 4];
}
return $decoded;
$buffer是客戶端第一次連接時發送的數據
封幀
$len=strlen($message);
if($len<=125){
return "\x81".chr($len).$message;
}else if($len<=65535){
return "\x81".chr(126).pack("n",$len).$message;
}else{
return "\x81".chr(127).pack("xxxxN",$len).$message;
}
$message是我們需要發送的數據
前端連接前記得運行服務端,運行方式:
在cmd輸入
php 你的服務端PHP文件路徑
運行前先配置環境變量:將你的PHP安裝路徑添加到Path中
到此,關于“php如何搭建websocket環境”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。