PHPでWebSocket環境を構築する方法

藏色散人
リリース: 2023-03-17 10:00:02
オリジナル
2474 人が閲覧しました

php で WebSocket 環境を構築する方法: 1. php.ini ファイルでソケット拡張子を見つけ、その前のセミコロンを削除します; 2. http を WebSocket にアップグレードします; 3. 環境変数を構成してインストールしますPHP Pathにパスを追加; 4.cmdに「php Path」と入力します。

PHPでWebSocket環境を構築する方法

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。

php で WebSocket 環境をセットアップするにはどうすればよいですか?

PHP は WebSocket サーバーを作成します

このサーバーを作成するには、最初にソケット拡張機能を有効にする必要があります。有効になっていない場合は、エラーが報告されます何があっても問題ありません。

php.ini ファイルでソケット拡張子を見つけて、その前のセミコロンを削除して開くだけです。

開く前に:

;extension=sockets
ログイン後にコピー

extension=sockets
ログイン後にコピー

opening Finished を開いた後、本題に進みます。まず、いくつかの関数を理解します:

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_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));
        }
ログイン後にコピー

$ソケットは作成した接続、$buffer はクライアントが初めて接続するときに送信されるデータです

注: Sec-WebSocket-Key: (.*)//角括弧とコロンの間にはスペースが必要です

Deframing

        $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 は最初のクライアントです最初の接続中に送信されるデータ

Frame seal

      $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 インストール パスを次の場所に追加します。パス

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPでWebSocket環境を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート