Workerman は、PHP をベースに開発された高性能 PHP ソケット フレームワークで、ネットワーク アプリケーションの開発に使用され、効率性、安定性、拡張性の利点があります。最大の特徴は、高い同時実行性をサポートし、数百万の TCP 接続を処理できることです。
この記事では、Workerman を使用して WebSocket サーバーを構築する方法、JavaScript の WebSocket API を使用してリアルタイム データを取得する方法など、Workerman を使用してリアルタイム データ視覚化システムを実装する方法を紹介します。 、ツール ライブラリ D3.js を使用して視覚化チャートを描画する方法について説明します。
Workerman のインストールは非常に簡単ですが、Composer を使用してインストールすることをお勧めします。ターミナルで次の操作を実行します。
composer require workerman/workerman
WebSocket サーバーを構築する手順は次のとおりです。
require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; use WorkermanLibTimer; use WorkermanConnectionTcpConnection; $ws_worker = new Worker("websocket://0.0.0.0:2346"); $ws_worker->onConnect = function (TcpConnection $connection) { echo "client connected "; }; $ws_worker->onMessage = function (TcpConnection $connection, $data) { $connection->send(json_encode(array( 'value' => rand(1, 100) ))); }; $ws_worker->onClose = function (TcpConnection $connection) { echo "client closed "; }; $ws_worker->onWorkerStart = function (Worker $ws_worker) { // 每隔1秒钟向所有客户端推送一次随机数据 Timer::add(1, function () use ($ws_worker) { foreach ($ws_worker->connections as $connection) { $connection->send(json_encode(array( 'value' => rand(1, 100) ))); } }); }; Worker::runAll();
コードは主に次の機能を実装します:
php server.php start
Inブラウザ JavaScript の WebSocket API を使用してリアルタイム データを取得するコードは次のとおりです:
var ws = new WebSocket('ws://localhost:2346'); ws.onmessage = function (event) { var data = JSON.parse(event.data); console.log(data.value); }
このコードは主に次の機能を実装します:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Realtime Data Visualization</title> <script src="https://d3js.org/d3.v4.min.js"></script> </head> <body> <script> var data = []; var width = 800; var height = 500; var svg = d3.select('body') .append('svg') .attr('width', width) .attr('height', height); var xScale = d3.scaleLinear() .range([0, width]) .domain([0, 10]); var yScale = d3.scaleLinear() .range([height, 0]) .domain([0, 100]); var line = d3.line() .x(function (d) { return xScale(d.index); }) .y(function (d) { return yScale(d.value); }); var path = svg.append('path') .attr('fill', 'none') .attr('stroke', 'steelblue') .attr('stroke-width', '1'); var shift = 0; ws.onmessage = function (event) { var dataItem = JSON.parse(event.data); // 添加新数据 data.push({ index: shift, value: dataItem.value }); // X轴平移 if (shift >= 10) { shift--; } // 更新数据的X轴位置 data.forEach(function (d) { d.index = d.index + 1; }); // 更新路径数据 path.attr('d', line(data)); shift++; }; </script> </body> </html>
コードは主に次の機能を実装します:
SVG 要素の作成;以上がWorkerman を使用してリアルタイム データ視覚化システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。