中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何搭建websocket環境

發布時間:2022-10-27 11:16:02 來源:億速云 閱讀:176 作者:iii 欄目:編程語言

這篇文章主要介紹“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環境”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平原县| 汶上县| 易门县| 宜宾市| 都兰县| 海口市| 旺苍县| 扶绥县| 文水县| 克拉玛依市| 吉安市| 吐鲁番市| 宁津县| 焉耆| 广安市| 宝应县| 伽师县| 阿拉善左旗| 大关县| 武川县| 磴口县| 准格尔旗| 济南市| 安乡县| 都江堰市| 福海县| 台北县| 邮箱| 阿图什市| 乌审旗| 黔江区| 文登市| 娱乐| 铜川市| 盐亭县| 东港市| 昭苏县| 沙洋县| 灯塔市| 华容县| 于田县|