在 PHP 中實現排名的實時更新,可以使用以下幾種方法:
// server.php
$rank = get_rank(); // 獲取排名數據
echo json_encode($rank); // 將排名數據以 JSON 格式返回
// client.html
setInterval(function() {
fetch('/server.php')
.then(response => response.json())
.then(data => {
console.log('排名更新:', data);
});
}, 5000); // 每隔 5 秒發送一次請求
// server.php
while (true) {
$rank = get_rank(); // 獲取排名數據
if ($rank !== false) { // 如果有了新的排名數據
echo json_encode($rank); // 將排名數據以 JSON 格式返回
break;
}
sleep(1); // 等待 1 秒
}
// server.php
$ws = new WebSocket\Server("ws://0.0.0.0:8080");
$ws->on('open', function ($ws, $request) {
// 當客戶端連接成功時,發送初始排名數據
$rank = get_rank();
$ws->send(json_encode($rank));
});
$ws->on('message', function ($ws, $message) {
// 當收到客戶端發來的消息時,處理請求(此處未使用)
});
$ws->on('close', function ($ws, $code, $reason) {
// 當客戶端斷開連接時,關閉 WebSocket 服務
});
// client.html
const ws = new WebSocket('ws://your_server_address:8080');
ws.addEventListener('open', function (event) {
console.log('WebSocket 連接已打開');
});
ws.addEventListener('message', function (event) {
const rank = JSON.parse(event.data);
console.log('排名更新:', rank);
});
ws.addEventListener('close', function (event) {
console.log('WebSocket 連接已關閉');
});
安裝 Ratchet:
composer require cboden/ratchet
創建 WebSocket 服務器:
// myWebSocketServer.php
require 'vendor/autoload.php';
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8080
);
$server->run();
創建處理排名邏輯的類:
// MyApp/Chat.php
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
$this->clients->attach($conn);
}
public function onMessage(ConnectionInterface $from, $msg) {
foreach ($this->clients as $client) {
if ($from !== $client) {
$client->send($msg);
}
}
}
public function onClose(ConnectionInterface $conn) {
$this->clients->detach($conn);
}
public function onError(ConnectionInterface $conn, \Exception $e) {
$conn->close();
}
public function getRank() {
// 獲取排名數據的邏輯
}
}
客戶端代碼與長輪詢示例相同。
以上就是在 PHP 中實現排名實時更新的幾種方法。你可以根據實際需求和技術棧選擇合適的方法。