リアルタイムメッセージングテクノロジーは、ウェブサイトやアプリケーションがより効率的なユーザーインタラクションエクスペリエンスを実現するのに役立ちます。たとえば、ユーザーがオンラインカスタマーサービス、チャットルーム、またはリアルタイム通知システムを使用する場合、できるだけ早くサーバーからメッセージを受信する必要があります。現在、WebSocketは主流のリアルタイム通信テクノロジーですが、一部のサーバーや環境に対するサポートが不十分であるため、PHPを使用することと長いポーリングを組み合わせて、実用的で実行可能な代替手段です。
メッセージプッシュの鍵は、クライアントとサーバー間の継続的な通信を維持することです。従来のHTTP通信は一元配置リクエスト応答ですが、クライアントがリクエストを発行した後、長いポーリングは応答を遅らせ、それによっておおよそのリアルタイム効果を達成します。
長いポーリングのコミュニケーションプロセスは、次の手順に分けることができます。
まず、メッセージを保存するためのデータベーステーブルを設計する必要があります。たとえば、次の「メッセージ」テーブルを作成できます。
CREATE TABLE messages (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
content VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
フロントエンドページは、プッシュされたリアルタイムメッセージを表示するために使用され、jQueryと組み合わせてHTMLとJavaScriptを使用して処理できます。
<!DOCTYPE html>
<html>
<head>
<title>リアルタイムのメッセージプッシュ</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div id="messages"></div>
</body>
</html>
バックエンドPHPコードは、長いポーリングロジックとデータ応答の処理を担当します。 index.phpという名前のファイルを作成して、フロントエンドによって開始されたリクエストを処理できます。
<?php
// データベース接続
$conn = new mysqli("localhost", "ユーザー名", "パスワード", "データベース名");
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
// 最後に受け取った最後のメッセージを取得しますID
$lastId = isset($_GET['last_id']) ? intval($_GET['last_id']) : 0;
$timeout = 30; // せいぜい待ってください302番
$startTime = time();
while (true) {
$sql = "SELECT * FROM messages WHERE id > $lastId ORDER BY id ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$messages = [];
while($row = $result->fetch_assoc()) {
$messages[] = $row;
}
echo json_encode(["status" => "success", "data" => $messages]);
break;
} else {
// 他のすべて12番检查一次是否有新消息,過度のサーバー圧力を避けてください
sleep(1);
}
if ((time() - $startTime) > $timeout) {
echo json_encode(["status" => "timeout", "data" => []]);
break;
}
}
$conn->close();
?>
let lastId = 0;
function fetchMessages() {
$.ajax({
url: 'index.php',
type: 'GET',
data: { last_id: lastId },
success: function(response) {
if (response.status === 'success') {
response.data.forEach(function(msg) {
$('#messages').append('<p>' + msg.content + '</p>');
lastId = msg.id;
});
}
fetchMessages();
},
error: function() {
setTimeout(fetchMessages, 3000);
}
});
}
$(document).ready(function() {
fetchMessages();
});
上記の方法を通して、PHPと長いポーリングテクノロジーを使用して、基本的なリアルタイムメッセージングプッシュシステムを構築しました。このソリューションは、適切な互換性と開発のしきい値が低く、WebSocket環境をサポートしていないプロジェクトに適しています。これは、リアルタイムのパフォーマンスが低いがタイムリーなフィードバックが必要なアプリケーションシナリオに採用する価値のあるソリューションです。