今日、WeChatやQQなどのソーシャルプラットフォームは一般にインスタントメッセージング機能をサポートしており、リアルタイムチャットシステムは最新のWebサイトの不可欠な部分になりました。この記事では、複数のユーザー間のリアルタイム接続とメッセージ伝送を実現できるPHPベースのライブチャットシステムを紹介します。システムはページを更新する必要はなく、ユーザーエクスペリエンスを改善するために追加のクライアントソフトウェアに依存しません。
マルチユーザーセッション管理は、ライブチャットシステムの中核です。システムは、WebSocketプロトコルを使用して接続を確立し、PHPをサーバー側の言語として使用します。 WebSocketはTCPプロトコルに基づいており、クライアントとサーバー間の双方向通信をサポートし、メッセージをリアルタイムで確実に配信できるようにします。
WebSocketは、クライアントとサーバーがデータを同時に送信および受信できるようにするTCPベースのフルデュプレックスプロトコルです。その主な機能には次のものがあります。
クライアントは、アップグレードプロトコルのリクエストヘッダーを含むWebSocketハンドシェイクリクエストを最初に送信します。サーバーがリクエストを受信した後、対応するアップグレードプロトコルを含む応答ヘッダーを返して、接続確立を完了します。
// サーバー側の確立WebSocket接続する
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);
while (true) {
// 等待客户端接続する
$clientSocket = socket_accept($socket);
// クライアントデータを受信します
$data = socket_read($clientSocket, 1024);
// 応答データを送信します
$response = "HTTP/1.1 101 Switching Protocols\r\n"
. "Upgrade: websocket\r\n"
. "Connection: Upgrade\r\n"
. "Sec-WebSocket-Accept: " . base64_encode(sha1($key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true)) . "\r\n\r\n";
socket_write($clientSocket, $response);
}
接続が確立された後、システムはRedisをバックエンドのサポートとして使用し、公開/購読メカニズムを介してリアルタイム通知を実現し、メッセージをすべてのサブスクライバーに迅速にプッシュできるようにします。
Redisは、メモリに基づいたオープンソースのキー価値データベースであり、文字列、リスト、コレクション、ハッシュテーブル、注文コレクションなどのさまざまなデータ構造をサポートします。キャッシュ、メッセージキュー、リアルタイムのデータ処理で広く使用されています。
このシステムでは、ユーザーが送信したチャットメッセージがRedisを介して特定のチャネルに公開されます。チャンネルを購読しているクライアントは、インスタント通知機能を実現し、リアルタイムでメッセージを受信できます。
// に情報を公開しますRedisチャネル
$redis->publish('chat:message', json_encode($message));
// サブスクリプションRedisチャネル,リアルタイムでメッセージを受信し、ユーザーに通知します
$redis->subscribe(['chat:message'], function ($redis, $channel, $message) use ($server) {
foreach ($server->connections as $connection) {
$connection->send($message);
}
});
この記事では、PHPに基づいたリアルタイムチャットシステムの主要なテクノロジーを紹介します。これには、WebSocketプロトコルやRedisの公開/購読メカニズムの双方向通信が含まれます。これらのテクノロジーを使用すると、システムは複数のユーザーにリアルタイムセッション管理とインスタントメッセージプッシュを実現し、ユーザーのインタラクションエクスペリエンスを大幅に改善できます。このソリューションが、開発者が効率的なリアルタイム通信機能を構築するのに役立つことを願っています。