ホームページ PHPフレームワーク Swoole Swooleをベースとした高性能WebSocketサーバー開発経験

Swooleをベースとした高性能WebSocketサーバー開発経験

Jun 14, 2023 am 11:48 AM
websocket ハイパフォーマンス swoole

Websocket は、TCP に基づく全二重通信プロトコルで、クライアントとサーバーがリアルタイムでデータをやり取りできるようにします。 Websocket プロトコルは、リアルタイム データ送信やオンライン ゲームなどのアプリケーション シナリオに適しています。HTTP プロトコルとは異なり、Websocket は長時間の接続を維持できるため、リクエストごとに TCP 接続を確立する必要がある HTTP プロトコルの欠点を回避できます。 。そのため、データ送信に Websocket プロトコルを使用する製品が増えています。

Websocket サーバーのパフォーマンスを向上させるために、開発に Swoole 拡張機能を使用できます。 Swoole は、一般的に使用されている高性能 PHP ネットワーク通信フレームワークであり、非同期イベント駆動モデルに基づいており、React や Node.js などの高性能フレームワークで一般的に使用されるコルーチンを実装しており、PHP のパフォーマンスを大幅に向上させます。この記事では、Swoole で高性能 Websocket サーバーを開発する方法を紹介し、関連するいくつかの経験を共有します。

1. Swoole サービスを開始する

Swoole サービスを開始する前に、まず Swoole 拡張機能をインストールする必要があります。 Swoole は、Windows、Linux、macOS などの一般的なオペレーティング システムをサポートしています。pecl コマンドを使用して拡張機能をインストールするか、Swoole 公式 Web サイトからソース コードをダウンロードしてコンパイルとインストールを行うことができます。ここでは pecl コマンドのインストールを例に挙げます。

pecl install swoole
ログイン後にコピー

インストールが完了したら、PHP コードで swoole_version() 関数を使用して Swoole のバージョン情報を表示し、拡張機能が正しくインストールされていることを確認します。

  1. サービス インスタンスの作成

Swoole を使用して Websocket サーバーを開発する前に、まずサービス インスタンスを作成する必要があります。 # Swoole が提供するクラス <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>$server = new SwooleWebSocketServer('0.0.0.0', 9501);</pre><div class="contentsignin">ログイン後にコピー</div></div> このうち、

0.0.0.0

は使用可能なすべての IP アドレスでリッスンすることを意味し、9501 は使用可能な IP アドレスでリッスンすることを意味しますポート番号。インスタンスを作成した後、ワーカー プロセスの数の設定、動作モードの設定、TCP プロトコルの有効化など、サーバー上でいくつかの構成を実行できます。詳細については、Swoole の公式ドキュメントを参照してください。

イベント コールバック関数の登録
  1. Websocket サーバーとクライアント間の通信は、イベント コールバック関数を通じて行われます。サービス インスタンスにコールバック関数を登録する必要があります。これにより、サービス インスタンスが適切なイベントに応答できるようになります。 Swoole には多くのコールバック関数 (onMessage、onOpen、onClose、onRequest、onHandShake など) が用意されていますが、Websocket サーバーを開発する場合、通常は次の 3 つのコールバック関数を登録する必要があります。 open イベントはクライアント上で発生します。接続が正常に確立された後、クライアントがメッセージを送信した後に message イベントがトリガーされ、接続が閉じられた後に close イベントがトリガーされます。 Swoole では、$frame オブジェクトは WebSocket メッセージのデータ本体を表し、メッセージの具体的な内容は $frame->data を通じて取得できます。

サービスの開始

    コールバック関数を登録した後、サービスを開始できます。コードは次のとおりです。 , 自動的に作成されます ワーカー プロセスとリアクター スレッドは、クライアント接続やメッセージ送信などのビジネス プロセスを処理するために使用されます。
  1. 2. Websocket サービスの開発経験

Swoole を使用して Websocket サーバーを開発する場合は、次の側面にも注意する必要があります:

ハートビート メカニズム

Websocket プロトコルには、HTTP プロトコルのような明確なリクエストと応答がありませんが、リアルタイムのデータ送信にメッセージ プッシュを使用します。 Websocket サーバーはクライアントの接続とメッセージ送信を長時間監視する必要があるため、クライアントが切断されるとメッセージを送信できなくなります。そのため、ハートビート メカニズムを実装し、接続を維持するために定期的にクライアントにハートビート リクエストを送信する必要があります。 Swoole では、

ping
    および
  1. pong
  2. メッセージを使用してハートビート メカニズムを実装できます。
//连接成功时触发
$server->on('open', function (SwooleWebSocketServer $server, $request) {
    //处理连接事件
});

//收到客户端消息时触发
$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    //处理消息事件
});

//连接关闭时触发
$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    //处理关闭事件
});
ログイン後にコピー

このうち、tick 関数はハートビート リクエストをクライアントに定期的に送信でき、onMessage コールバック関数はクライアントのハートビート応答を処理してクライアントが確実にとサーバーは接続を維持します。

メッセージ ブロードキャストWebsocket サーバーの非常に一般的なシナリオは、集中砲火やマルチプレイヤー ゲームなど、すべてのクライアントにメッセージをブロードキャストすることです。 Swoole では、

push
    メソッドを使用してメッセージをブロードキャストできます。
  1. $server->start();
    ログイン後にコピー
  2. さらに、クライアントの接続情報に基づいて、特定のクライアントにターゲットを絞ったメッセージを送信することもできます。

データ形式

Websocket プロトコルでは、クライアントとサーバー間で通信されるデータは JSON、XML、およびその他の形式で送信されることがあります。 data の場合は、

json_decode
    を使用して JSON 形式を解析するなど、データをフォーマットする必要があります。
  1. //心跳包
    $server->tick(30000, function () use ($server) {
        foreach ($server->connections as $fd) {
            $server->push($fd, json_encode(['type' => 'ping']));
        }
    });
    
    //心跳响应
    $server->on('message', function (SwooleWebSocketServer $server, $frame) {
        if ($frame->data == 'pong') {
            //处理心跳响应
        }
    });
    ログイン後にコピー
マルチプロセス管理

Websocket サーバーでは、大量のクライアント リクエストが発生します。サーバーの処理能力を向上させるために、次のコマンドを使用できます。 Swooleのマルチプロセス管理の特徴。 Swoole は、マスター プロセスと複数のワーカー プロセスをサポートしています。マスター プロセスはワーカー プロセスの管理に使用され、ワー​​カー プロセスは特定のクライアント リクエストの処理を担当します。サービス インスタンスを作成するときに、さまざまなサイズのリクエスト負荷に適応するようにワーカー プロセスの数を設定できます。

//处理广播消息
$message = 'Hello, everyone!';
foreach ($server->connections as $fd) {
    $server->push($fd, $message);
}
ログイン後にコピー
    マルチプロセス環境では、データの同期と共有の問題に注意する必要があります。Swoole が提供するプロセス、テーブル、アトミック、ミューテックスなどのコンポーネントを使用して、プロセス間の通信と同期を実現できます。 。
  1. つまり、Swoole を使用して Websocket サーバーを開発すると、サーバーのパフォーマンスと安定性が大幅に向上しますが、それには Swoole の関連機能と開発スキルに習熟する必要もあります。この記事が開発者にとって役立ち、高性能 Websocket サーバーをより適切に実装するための参考になれば幸いです。

以上がSwooleをベースとした高性能WebSocketサーバー開発経験の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SSE と WebSocket SSE と WebSocket Apr 17, 2024 pm 02:18 PM

この記事では、どちらも信頼できるデータ配信方法である Server Sent Events (SSE) と WebSocket を比較します。通信方向、基盤となるプロトコル、セキュリティ、使いやすさ、パフォーマンス、メッセージ構造、使いやすさ、テストツールを含む 8 つの側面で分析します。これらの側面の比較は次のように要約されます。 カテゴリ サーバー送信イベント (SSE) WebSocket の通信方向 単方向 双方向 基礎となるプロトコル HTTP WebSocket プロトコルのセキュリティ HTTP と同じ 既存のセキュリティの脆弱性 使いやすさ セットアップが簡単 セットアップが複雑 パフォーマンスが速い メッセージ送信速度が高い メッセージ処理の影響を受けるおよび接続管理 メッセージ構造 プレーンテキストまたはバイナリ 使いやすさ 広く利用可能 WebSocket の統合に役立つ

PHP と WebSocket: リアルタイム データ転送のベスト プラクティス PHP と WebSocket: リアルタイム データ転送のベスト プラクティス Dec 18, 2023 pm 02:10 PM

PHP と WebSocket: リアルタイム データ転送のベスト プラクティス方法 はじめに: Web アプリケーション開発では、リアルタイム データ転送は非常に重要な技術要件です。従来の HTTP プロトコルは要求応答モデルのプロトコルであり、リアルタイムのデータ送信を効果的に実現できません。リアルタイム データ送信のニーズを満たすために、WebSocket プロトコルが登場しました。 WebSocket は、単一の TCP 接続上で全二重通信を行う方法を提供する全二重通信プロトコルです。 Hと比べて

Laravelでswooleコルーチンを使用する方法 Laravelでswooleコルーチンを使用する方法 Apr 09, 2024 pm 06:48 PM

Laravel で Swoole コルーチンを使用すると、大量のリクエストを同時に処理でき、次のような利点があります: 同時処理: 複数のリクエストを同時に処理できます。高いパフォーマンス: Linux の epoll イベント メカニズムに基づいて、リクエストを効率的に処理します。低リソース消費: 必要なサーバー リソースが少なくなります。統合が簡単: Laravel フレームワークとのシームレスな統合が可能で、使いやすいです。

golang WebSocket プログラミングのヒント: 同時接続の処理 golang WebSocket プログラミングのヒント: 同時接続の処理 Dec 18, 2023 am 10:54 AM

Golang は強力なプログラミング言語であり、WebSocket プログラミングでの Golang の使用が開発者の間でますます評価されています。 WebSocket は、クライアントとサーバー間の双方向通信を可能にする TCP ベースのプロトコルです。この記事では、Golang を使用して、複数の同時接続を同時に処理する効率的な WebSocket サーバーを作成する方法を紹介します。テクニックを紹介する前に、まず WebSocket とは何かを学びましょう。 WebSocketWeb の概要

スウールとワーカーマンはどちらが良いですか? スウールとワーカーマンはどちらが良いですか? Apr 09, 2024 pm 07:00 PM

Swoole と Workerman はどちらも高性能の PHP サーバー フレームワークです。 Swoole は、非同期処理、優れたパフォーマンス、スケーラビリティで知られており、多数の同時リクエストと高スループットを処理する必要があるプロジェクトに適しています。 Workerman は、使いやすさや同時実行量が少ないプロジェクトに適した直感的な API を備え、非同期モードと同期モードの両方の柔軟性を提供します。

リアルタイム翻訳機能を実装するためのPHP Websocket開発ガイド リアルタイム翻訳機能を実装するためのPHP Websocket開発ガイド Dec 18, 2023 pm 05:52 PM

PHP Websocket 開発ガイド: リアルタイム変換機能の実装 はじめに: インターネットの発展に伴い、さまざまなアプリケーション シナリオでリアルタイム通信の重要性がますます高まっています。新しい通信プロトコルとして、Websocket はリアルタイム通信を適切にサポートします。この記事では、PHP を使用して Websocket アプリケーションを開発し、リアルタイム翻訳機能を組み合わせてその具体的なアプリケーションをデモンストレーションする方法を詳しく説明します。 1. Websocket プロトコルとは何ですか? Websocket プロトコルは、

Golang でのファイル転送に WebSocket を使用する方法 Golang でのファイル転送に WebSocket を使用する方法 Dec 18, 2023 am 09:06 AM

golang で WebSocket を使用してファイル転送を行う方法 WebSocket は、双方向通信をサポートし、ブラウザとサーバーの間に永続的な接続を確立できるネットワーク プロトコルです。 golang では、サードパーティのライブラリ Gorilla/websocket を使用して WebSocket 機能を実装できます。この記事では、ファイル転送に golang と Gorilla/WebSocket ライブラリを使用する方法を紹介します。まず、ゴリラをインストールする必要があります

swoole と java ではどちらの方がパフォーマンスが優れていますか? swoole と java ではどちらの方がパフォーマンスが優れていますか? Apr 09, 2024 pm 07:03 PM

パフォーマンスの比較: スループット: Swoole は、コルーチン メカニズムのおかげでスループットが高くなります。レイテンシー: Swoole のコルーチン コンテキスト スイッチングは、オーバーヘッドが低く、レイテンシーが小さくなります。メモリ消費量: Swoole のコルーチンが占有するメモリは少なくなります。使いやすさ: Swoole は、より使いやすい同時プログラミング API を提供します。

See all articles