搜尋
首頁web前端js教程用AngularJS構建實時信號儀表板

構建實時服務監控面板!

Build a Real-time SignalR Dashboard with AngularJS 我們的服務監控面板將實時顯示真實數據。它將以近乎實時的、異步的、非阻塞的方式向我們展示服務器和微服務上發生的情況。

點擊此處查看完整客戶端示例。

觀看使用D3.js可視化數據,用JavaScript闡述你的數據! 觀看此課程 觀看此課程 此處展示服務器演示。

我們將使用AngularJS框架和許多炫酷的實時圖表以及大量實時數據來構建此監控面板的簡化版本。我們還將使用.NET 4.5的SignalR和Web API庫構建我們的服務。

關鍵要點

  • 利用AngularJS和SignalR創建一個實時監控面板,異步且非阻塞地顯示服務器和微服務的活動。
  • 使用純文本文件或Visual Studio設置項目,依賴項包括AngularJS、jQuery、Bootstrap、SignalR以及各種圖表庫,如D3.js和Epoch。
  • 在服務器端實現SignalR中心來管理實時數據傳輸,利用.NET處理異步請求和向客戶端推送通知的能力。
  • 開發AngularJS服務和控制器來處理從SignalR中心接收的數據,實時更新UI以反映服務器性能指標的變化。
  • 集成ng-epoch和n3-pie等圖表解決方案來直觀地表示數據,增強監控面板的交互性和用戶參與度。

技術架構

客戶端

AngularJS開箱即用地強制執行良好的應用程序開發實踐。所有內容都是注入的,這意味著依賴項的耦合度低。此外,Angular在視圖、模型和控制器之間具有良好的分離。

Angular在這裡補充了.NET,允許服務器端代碼保持小巧、易於管理和可測試。服務器端代碼僅用於發揮其優勢——進行繁重的處理。

服務器端

將SignalR與.NET 4.5的Web API一起使用與將Node.js與Socket.IO一起使用非常相似,並允許從服務器到訂閱客戶端進行相同類型的非阻塞、異步推送。 SignalR在底層使用WebSockets,但因為它抽象了通信,所以在Angular內部運行時,它將回退到客戶端瀏覽器支持的任何技術。 (例如,對於舊版瀏覽器,它可能會回退到長輪詢。)

此外,借助動態標籤和Json.NET的魔力,.NET框架將JavaScript視為一等公民。事實上,通過JavaScript使用Web API和SignalR技術通常比通過原生.NET客戶端更容易,因為它們是考慮到JavaScript而構建的。

核心內容

開始設置

本教程中使用的所有AngularJS代碼都可以在此處找到。

我將介紹如何使用您最喜歡的文本編輯器和純文件夾以及Visual Studio來創建它,這取決於創建項目的工具。

使用純文本文件進行設置

文件夾和文件結構如下所示:

<code>root
    app     (Angular应用程序特定的JavaScript)
    Content (CSS等)
    Scripts (引用的JavaScript等)
    ...
    index.html</code>

主要依賴項

您需要下載以下文件:

  • jQuery(選擇“下載壓縮的生產jQuery 2.1.1”鏈接)
  • AngularJS(單擊大型“下載”選項,然後單擊Angular 1.3 的最新版本)
  • Bootstrap(單擊“下載Bootstrap”選項)
  • SignalR(單擊右側的“下載ZIP”按鈕)
  • D3.js(單擊頁面中間的“d3.zip”鏈接)
  • Epoch(單擊“下載v0.6.0鏈接”)
  • ng-epoch(單擊右側的“下載ZIP”按鈕)
  • n3-pie(單擊右側的“下載ZIP”按鈕)

在我們的Scripts文件夾中,我們需要:

  • jquery-2.1.1.min.js
  • angular.min.js
  • bootstrap.min.js
  • jquery.signalR.min.js
  • d3.min.js
  • epoch.min.js
  • pie-chart.min.js

在我們的Content文件夾中:

  • bootstrap.min.css
  • epoch.min.css

使用Visual Studio進行設置

如果您覺得文本文件過於簡單,則通過Visual Studio進行設置非常簡單。

只需通過轉到文件 -> 新建 -> 項目,然後選擇Web作為模板類型來設置一個空的Web應用程序。

Build a Real-time SignalR Dashboard with AngularJS 然後只需右鍵單擊項目,轉到管理Nuget包,搜索並下載jQuery、AngularJS、Bootstrap、D3和SignalR JavaScript客戶端。

下載並安裝這些後,您應該在Scripts和Contents文件夾中看到它們。此外,在已安裝的Nuget包下,您將看到以下內容:

Build a Real-time SignalR Dashboard with AngularJS 最後,Nuget不包含Epoch、ng-epoch和n3圖表庫,因此您需要手動添加它們。只需按照上一節中詳細介紹的步驟即可獲取這些庫。

讓我們編寫我們的應用程序

現在我們準備編寫一些代碼了。

首先,讓我們創建我們的基本index.html文件,它將容納我們的Angular JavaScript代碼。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>AngularJS - SignalR - ServiceDashboard</title>
  <link rel="stylesheet" href="Content/bootstrap.min.css" />
  <link rel="stylesheet" href="Content/epoch.min.css" />

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

</head>
<body ng-app="angularServiceDashboard">

</body>
</html>

這裡有一些事情需要注意。首先,我們添加了所有依賴項以便它們加載。其次,我們引用了一些尚不存在的新文件(app文件夾中的所有文件)。我們接下來將編寫這些文件。

讓我們進入我們的app文件夾並創建我們的app.js文件。這是一個非常簡單的文件。

<code>root
    app     (Angular应用程序特定的JavaScript)
    Content (CSS等)
    Scripts (引用的JavaScript等)
    ...
    index.html</code>

此文件為我們做了幾件事。它設置了我們的主應用程序模塊angularServiceDashboard,並註入了兩個外部引用——ng.epoch(這是我們的Epoch.js Angular指令)和n3-pie-chart(這是一個為Angular製作的、結構良好的圖表庫)。

如果您注意到,我們還為backendServerUrl注入了一個值,它當然託管在其他地方,我們計劃在這裡使用它。

讓我們創建一個服務工廠類,它將綁定到服務器的URL。這將是我們HTML中引用的services.js文件,它將進入app文件夾:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>AngularJS - SignalR - ServiceDashboard</title>
  <link rel="stylesheet" href="Content/bootstrap.min.css" />
  <link rel="stylesheet" href="Content/epoch.min.css" />

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

</head>
<body ng-app="angularServiceDashboard">

</body>
</html>

這段代碼使用了流行的on和off(這裡不需要off)訂閱模式,並通過使用Angular工廠封裝了與我們應用程序的SignalR的所有通信。

這段代碼乍一看可能有點讓人不知所措,但當我們構建控制器時,您會更好地理解它。它所做的只是獲取後端SignalR服務器的URL和SignalR中心名稱。 (在SignalR中,您可以在同一服務器中使用多個中心來推送數據。)

此外,這段代碼允許SignalR服務器(位於其他地方的某個盒子中)通過on方法調用我們的應用程序。它允許我們的應用程序通過invoke方法調用SignalR服務器內部的函數。

接下來,我們需要我們的控制器,它將把我們的數據從服務綁定到我們的作用域。讓我們在我們的app文件夾中創建一個名為controllers.js的文件。

'use strict';

var app = angular.module('angularServiceDashboard', ['ng.epoch','n3-pie-chart']);
app.value('backendServerUrl', 'http://sitepointsignal.cloudapp.net/');

此控制器在這裡做了一些事情。它創建了我們的Angular服務對象並將其綁定一個回調函數,以便服務器在我們的控制器中調用某些內容。

您會看到,每次服務器回調我們時,我們都會遍歷服務器返回的JSON數組。然後我們為每種性能類型都有一個switch語句。現在,我們將設置RAM,然後返回並填充其餘部分。

至於我們的指令,我們實際上只需要一個用於我們的Epoch圖表。我們將使用一個名為ng-epoch.js的開源指令,我們在我們的index.html存根文件中已經對其進行了引用。

我們可以將所有這些圖表拆分為不同的指令,使用一些模板並使用UI-Router,但是為了本教程的簡單起見,我們將把所有視圖都放在我們的index.html文件中。

現在讓我們將我們的視圖添加到index.html文件中。我們可以通過在body標籤下添加以下內容來實現:

'use strict';

app.factory('backendHubProxy', ['$rootScope', 'backendServerUrl', 
  function ($rootScope, backendServerUrl) {

    function backendFactory(serverUrl, hubName) {
      var connection = $.hubConnection(backendServerUrl);
      var proxy = connection.createHubProxy(hubName);

      connection.start().done(function () { });

      return {
        on: function (eventName, callback) {
              proxy.on(eventName, function (result) {
                $rootScope.$apply(function () {
                  if (callback) {
                    callback(result);
                  }
                 });
               });
             },
        invoke: function (methodName, callback) {
                  proxy.invoke(methodName)
                  .done(function (result) {
                    $rootScope.$apply(function () {
                      if (callback) {
                        callback(result);
                      }
                    });
                  });
                }
      };
    };

    return backendFactory;
}]);

這將簡單地創建一個位置,讓服務器將RAM數據推回。數據將首先進入我們的服務,然後進入控制器,最後進入視圖。

它應該看起來像這樣:

Build a Real-time SignalR Dashboard with AngularJS 現在讓我們添加一些圖表,這正是我們真正想要做的。我們將為epoch.js時間線添加一個名為timestamp的變量。我們還將添加一個名為chartEntry的數組,我們將將其綁定到我們的epoch.ng指令。

<code>root
    app     (Angular应用程序特定的JavaScript)
    Content (CSS等)
    Scripts (引用的JavaScript等)
    ...
    index.html</code>

然後讓我們映射switch語句中的數據並添加其餘所需的epoch.js數據項。當然,我們可以進一步分解它(例如,使用更多函數和過濾器),但為了本教程的簡單起見,我們將保持簡單。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>AngularJS - SignalR - ServiceDashboard</title>
  <link rel="stylesheet" href="Content/bootstrap.min.css" />
  <link rel="stylesheet" href="Content/epoch.min.css" />

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

</head>
<body ng-app="angularServiceDashboard">

</body>
</html>

我們的控制器看起來更完善了。我們在作用域中添加了一個realtimeAreaFeed,我們將通過ng-epoch指令將其綁定到我們的視圖,並且我們還在作用域中添加了areaAxes,它決定了區域圖的佈局。

現在讓我們將指令添加到index.html並顯示傳入的CPU值數據:

'use strict';

var app = angular.module('angularServiceDashboard', ['ng.epoch','n3-pie-chart']);
app.value('backendServerUrl', 'http://sitepointsignal.cloudapp.net/');

chart-class指的是D3.js的顏色方案,chart-height是您猜測的內容,chart-stream是從SignalR服務器返回的數據。

有了它,我們應該看到圖表實時出現:

Build a Real-time SignalR Dashboard with AngularJS 現在讓我們將大量數據點連接到此圖表,並從n3-pie框架添加另一個圖表(因為誰不喜歡餅圖!)。

要從n3-pie框架添加餅圖,只需將以下內容添加到我們的控制器中:

'use strict';

app.factory('backendHubProxy', ['$rootScope', 'backendServerUrl', 
  function ($rootScope, backendServerUrl) {

    function backendFactory(serverUrl, hubName) {
      var connection = $.hubConnection(backendServerUrl);
      var proxy = connection.createHubProxy(hubName);

      connection.start().done(function () { });

      return {
        on: function (eventName, callback) {
              proxy.on(eventName, function (result) {
                $rootScope.$apply(function () {
                  if (callback) {
                    callback(result);
                  }
                 });
               });
             },
        invoke: function (methodName, callback) {
                  proxy.invoke(methodName)
                  .done(function (result) {
                    $rootScope.$apply(function () {
                      if (callback) {
                        callback(result);
                      }
                    });
                  });
                }
      };
    };

    return backendFactory;
}]);

當然,該值將由SignalR服務器更新。您可以在我們控制器的完整代碼中看到這一點。

我們還應該花點時間考慮一下我們視圖的完整代碼。

我們應該在屏幕上看到以下數據:

Build a Real-time SignalR Dashboard with AngularJS 我們已經看到Angular可以非常輕鬆地連接到SignalR——只需在AngularJS服務或工廠中插入端點即可。 AngularJS工廠是一種與SignalR通信的封裝機制。 “結合”後,誰知道AngularJS和.NET會如此完美地協同工作?

服務器的核心方面

我將介紹一些.NET代碼,這些代碼允許在後端進行此通信。 (您可以在此處找到源代碼。)

首先,要開始構建服務器代碼,您需要在Visual Studio解決方案中運行SignalR。為此,只需按照ASP.NET上的優秀教程即可運行基本的SignalR解決方案。 (這是最簡單的。)

運行後,將C# Hub類更改為以下內容:

'use strict';

app.controller('PerformanceDataController', ['$scope', 'backendHubProxy',
  function ($scope, backendHubProxy) {
    console.log('trying to connect to service')
    var performanceDataHub = backendHubProxy(backendHubProxy.defaultServer, 'performanceHub');
    console.log('connected to service')
    $scope.currentRamNumber = 68;

    performanceDataHub.on('broadcastPerformance', function (data) {
      data.forEach(function (dataItem) {
        switch(dataItem.categoryName) {
          case 'Processor':
            break;
          case 'Memory':
            $scope.currentRamNumber = dataItem.value;
            break;
          case 'Network In':
            break;
          case 'Network Out':
            break;
          case 'Disk Read Bytes/Sec':
            break;
          case 'Disk Write Bytes/Sec':
            break;
          default:
            //default code block
            break;           
        }
      });     
    });
  }
]);

更改Hub類後,Visual Studio將報錯,您需要添加一個性能模型(由於Json.NET,它在服務器推送時會自動轉換為JSON):

<code>root
    app     (Angular应用程序特定的JavaScript)
    Content (CSS等)
    Scripts (引用的JavaScript等)
    ...
    index.html</code>

JsonProperty元數據只是告訴Json.NET在為此模型轉換為JSON時自動將屬性名稱轉換為小寫。 JavaScript喜歡小寫。

讓我們添加一個PerformanceEngine類,它將通過SignalR將真實性能數據推送到任何偵聽的客戶端。該引擎通過異步後台線程通過SignalR向任何偵聽的客戶端發送這些消息。

由於其長度,您可以在我們的GitHub存儲庫中找到代碼。

此代碼基本上在每次while迭代中將一系列性能指標推送到任何已訂閱的客戶端。這些性能指標被注入到構造函數中。從服務器推送的速度在構造函數參數pollIntervalMillis上設置。

請注意,如果您使用OWIN作為自託管來託管SignalR,這將運行良好,如果您使用Web工作線程,它也應該運行良好。

最後要做的事情當然是在服務的OnStart()或Startup類中的某個地方啟動後台線程。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>AngularJS - SignalR - ServiceDashboard</title>
  <link rel="stylesheet" href="Content/bootstrap.min.css" />
  <link rel="stylesheet" href="Content/epoch.min.css" />

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

  <🎜>
  <🎜>
  <🎜>
  <🎜>

</head>
<body ng-app="angularServiceDashboard">

</body>
</html>

啟動後台線程的兩行代碼(正如您猜到的那樣)是我們實例化PerformanceEngine和調用OnPerformanceMonitor()的地方。

現在,我知道您可能認為我正在隨機化來自服務器的數據,這是事實。但是要推送真實指標,只需使用System.Diagnostics庫和Windows提供的PerformanceCounter即可。我試圖保持簡單,但這就是代碼的樣子:

'use strict';

var app = angular.module('angularServiceDashboard', ['ng.epoch','n3-pie-chart']);
app.value('backendServerUrl', 'http://sitepointsignal.cloudapp.net/');

結論

我們已經了解瞭如何通過Angular使用SignalR數據,並且我們已經將該數據連接到Angular端的實時圖錶框架。

此處顯示客戶端最終版本的演示,您可以從此處獲取代碼。

Build a Real-time SignalR Dashboard with AngularJS 此處顯示服務器最終版本的演示,您可以從此處獲取代碼。

Build a Real-time SignalR Dashboard with AngularJS 我希望您喜歡這個演練。如果您嘗試過類似的方法,請在評論中告訴我們!

使用AngularJS構建實時SignalR監控面板的常見問題解答 (FAQ)

如何在AngularJS中設置SignalR?

在AngularJS中設置SignalR涉及幾個步驟。首先,您需要使用NuGet或npm安裝SignalR庫。安裝後,您可以在服務器上創建一個新的SignalR中心。此中心將負責發送和接收消息。在客戶端,您需要引用SignalR JavaScript庫並創建到您的中心的連接。然後,您可以啟動連接並定義處理傳入消息的函數。

如何處理SignalR中的連接錯誤?

SignalR提供了一種處理連接錯誤的內置機制。您可以使用中心連接上的.error()函數來定義一個回調函數,該函數將在發生錯誤時調用。此回調函數可以向用戶顯示錯誤消息或嘗試重新連接到中心。

我可以將SignalR與其他JavaScript框架一起使用嗎?

是的,SignalR可以與任何支持AJAX和WebSockets的JavaScript框架一起使用。這包括流行的框架,如React、Vue.js和Angular。您只需要將SignalR JavaScript庫包含在您的項目中並像在任何其他JavaScript應用程序中一樣創建一個中心連接即可。

如何使用SignalR將消息從服務器發送到客戶端?

要將消息從服務器發送到客戶端,您可以使用中心的Clients屬性。此屬性提供方法,用於將消息發送到所有連接的客戶端、特定客戶端或客戶端組。您可以從服務器代碼的任何部分調用這些方法,以將實時更新發送到您的客戶端。

如何保護我的SignalR應用程序?

SignalR提供了幾個保護應用程序的選項。您可以使用[Authorize]屬性來限制對您的中心和中心方法的訪問。您還可以使用Global.asax文件中的MapHubs()方法為您的中心指定自定義授權器。此外,您可以使用SSL來加密SignalR流量並防止竊聽。

如何處理SignalR中的斷開連接?

SignalR會自動處理斷開連接並嘗試重新連接。但是,您也可以使用中心連接上的.disconnected()函數手動處理斷開連接。此函數允許您定義一個回調函數,該函數將在連接丟失時調用。

我可以在非.NET服務器上使用SignalR嗎?

SignalR是一個.NET庫,旨在與.NET服務器一起使用。但是,可以通過使用兼容的WebSocket庫在非.NET服務器上使用SignalR。您需要在服務器上實現SignalR協議並自行處理連接和消息傳遞邏輯。

如何測試我的SignalR應用程序?

您可以使用Postman或Fiddler等工具向您的中心發送HTTP請求並驗證響應來測試您的SignalR應用程序。您還可以為您的中心方法和客戶端函數編寫單元測試。

我可以在移動應用程序中使用SignalR嗎?

是的,您可以在移動應用程序中使用SignalR。 SignalR JavaScript庫可以在使用Cordova或Ionic構建的混合移動應用程序中使用。對於原生移動應用程序,iOS和Android都提供了SignalR客戶端。

如何擴展我的SignalR應用程序?

SignalR提供了幾個擴展應用程序的選項。您可以使用Azure SignalR服務,這是一個完全託管的服務,它為您處理所有SignalR連接。您還可以使用後端,這是一個軟件層,用於在多個服務器之間分發消息。

以上是用AngularJS構建實時信號儀表板的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用