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