日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Workerman是一款基于PHP開發(fā)的高性能PHP socket框架,用于開發(fā)網絡應用程序,具有高效、穩(wěn)定、可擴展等優(yōu)點。其中最大的特點就是支持高并發(fā),可處理百萬級的TCP連接。

在本文中,我們將介紹如何使用Workerman實現(xiàn)實時數(shù)據(jù)可視化系統(tǒng),包括如何使用Workerman搭建WebSocket服務器,如何使用JavaScript的WebSocket API獲取實時數(shù)據(jù),以及如何使用工具庫D3.js繪制可視化圖表。

    安裝Workerman

Workerman的安裝非常簡單,推薦使用Composer來進行安裝。在終端中進行如下操作:

composer require workerman/workerman

登錄后復制

    搭建WebSocket服務器

搭建WebSocket服務器的步驟如下:

    創(chuàng)建WebSocket服務器文件server.php,代碼如下:
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秒鐘向所有客戶端推送一次隨機數(shù)據(jù)
    Timer::add(1, function () use ($ws_worker) {
        foreach ($ws_worker->connections as $connection) {
            $connection->send(json_encode(array(
                'value' => rand(1, 100)
            )));
        }
    });
};

Worker::runAll();

登錄后復制

代碼主要實現(xiàn)以下功能:

創(chuàng)建WebSocket服務器;監(jiān)聽客戶端連接事件;監(jiān)聽客戶端發(fā)送消息事件;監(jiān)聽客戶端關閉連接事件;在服務器啟動時,定時向所有客戶端推送一次隨機數(shù)據(jù)。

    在終端中運行WebSocket服務器:
php server.php start

登錄后復制

    使用JavaScript獲取實時數(shù)據(jù)

在瀏覽器中使用JavaScript的WebSocket API獲取實時數(shù)據(jù)的代碼如下:

var ws = new WebSocket('ws://localhost:2346');  

ws.onmessage = function (event) {  
    var data = JSON.parse(event.data);  
    console.log(data.value);  
}

登錄后復制

代碼主要實現(xiàn)以下功能:

創(chuàng)建WebSocket連接;在接收到服務器發(fā)送數(shù)據(jù)時,解析數(shù)據(jù)并在控制臺輸出。

    使用D3.js繪制可視化圖表

在瀏覽器中使用D3.js繪制可視化圖表的代碼如下:

<!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);

        // 添加新數(shù)據(jù)
        data.push({
            index: shift,
            value: dataItem.value
        });

        // X軸平移
        if (shift >= 10) {
            shift--;
        }

        // 更新數(shù)據(jù)的X軸位置
        data.forEach(function (d) {
            d.index = d.index + 1;
        });

        // 更新路徑數(shù)據(jù)
        path.attr('d', line(data));

        shift++;
    };
</script>
</body>
</html>

登錄后復制

代碼主要實現(xiàn)以下功能:

創(chuàng)建SVG元素;定義比例尺;定義路徑生成器;添加路徑元素;接收實時數(shù)據(jù)并更新路徑數(shù)據(jù)。

至此,我們已經完成了使用Workerman、JavaScript和D3.js實現(xiàn)實時數(shù)據(jù)可視化系統(tǒng)的所有代碼。在瀏覽器中打開HTML文件,您可以看到不斷更新的折線圖,代表著不斷推送的隨機數(shù)。

分享到:
標簽:Workerman 可視化 實時數(shù)據(jù)
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定