PHPによるメッセージプッシュ機能の仕組み

PHP でのメッセージプッシュ機能を実現するには、WebSocket 技術を使用できます。

WebSocket は、単一の TCP 接続上で全二重通信を行うプロトコルであり、サーバーがクライアントにメッセージをプッシュできる一方で、クライアントからのリクエストは必要ありません。

PHP WebSocket サーバーのシンプルなサンプルコード:

<?php
// 创建 WebSocket 服务器
$server = new swoole_websocket_server("127.0.0.1", 9501);

// 监听 WebSocket 连接打开事件
$server->on('open', function ($server, $req) {
    echo "connection open: {$req->fd}\n";
});

// 监听 WebSocket 消息接收事件
$server->on('message', function ($server, $frame) {
    echo "received message: {$frame->data}\n";

    // 广播消息给所有客户端
    foreach ($server->connections as $fd) {
        $server->push($fd, $frame->data);
    }
});

// 监听 WebSocket 连接关闭事件
$server->on('close', function ($server, $fd) {
    echo "connection close: {$fd}\n";
});

// 启动 WebSocket 服务器
$server->start();

WebSocketサーバーが作成され、127.0.0.1:9501で待機し、open、message、closeイベントの3つのイベントハンドラが定義されました。

WebSocket 接続の確立時に発生するイベントです。 クライアントとサーバー間の接続情報を記録することができます。

メッセージイベントはサーバがクライアントからメッセージを受信したときに発生し、受信したメッセージを処理してpushメソッドで全てのクライアントにブロードキャストすることができる。

WebSocket接続のクライアントとサーバーの接続が切断された時に発生するイベントであり、接続関連のリソースをここでクリーンナップできます。

WebSocket接続をクライアント側で実装するには、JavaScriptのWebSocket APIを利用できます。以下のコードは、その簡単なサンプルです。

// 创建 WebSocket 连接
var socket = new WebSocket('ws://127.0.0.1:9501');

// 监听 WebSocket 连接打开事件
socket.onopen = function(event) {
    console.log('connection open');
};

// 监听 WebSocket 消息接收事件
socket.onmessage = function(event) {
    console.log('received message: ' + event.data);
};

// 监听 WebSocket 连接关闭事件
socket.onclose = function(event) {
    console.log('connection close');
};

// 发送消息到服务器
socket.send('Hello, server!');

上のコードはWebSocket接続を作成し、3つのイベントハンドラ関数、onopen、onmessage、oncloseを定義しています。

onopen イベントは、サーバーと WebSocket 接続を確立したときに発生し、このイベントでは初期化処理を実行できます。

サーバーから送信されたメッセージを受け取ると、 onmessage イベントがトリガーされ、ここで受信したメッセージを処理できます。

oncloseイベントはWebSocketがサーバーとの接続が切れたときに発生し、このイベントでクリーンアップ操作を実行できます。

サーバにメッセージを送信するには、send メソッドを呼び出します。

以上は、PHP でメッセージングを行う実装のサンプルです。実際の使用では、必要に応じてさらに複雑な機能拡張を行うことができます。

bannerAds