簡體   English   中英

在沒有輪詢器的情況下基於MySQL數據庫創建Node.js儀表板

[英]Creating a Node.js dashboard based on a MySQL DB without a poller

我已經閱讀了一些與此主題相關的StackOverflow帖子,但是找不到適合我的情況的任何東西。

我們的網絡中有多個監視實例,可以監視不同的環境(Nagios,Icinga等)。 目前,我有一個用PHP編寫的輪詢器腳本,該腳本通過cron每分鍾運行一次,它要求實例以JSON返回其所有問題,然后腳本對此進行解釋並將其推入MySQL數據庫。

然后是一個“概述”頁面,該頁面僅讀取數據庫並進行一些格式化。 涉及到一點AJAX,每X秒鍾(當前使用30秒)會檢查一次更改(PHP腳本調用),如果有更改,它將通過AJAX請求更改並更新頁面。

還有其他一些內容(單擊一個問題,另一個AJAX請求關閉以獲取問題詳細信息以模態顯示)。

我一直是PHP / MySQL開發人員,因此上述方法對我來說似乎合乎邏輯,並且編寫起來快速/容易,並且行得通。 但是,問題是:數據庫經常被許多用戶輪詢,前端的javascript網格占邏輯的一半,后端的PHP占邏輯的一半。

從切換到NodeJS可以使該用例受益嗎? 我之前已經做了一些Node.JS,但是卻沒有這樣的事情。 我可以訂閱MySQL更新嗎? 還是在“數據提取器”將數據推入數據庫時​​觸發它們? 我一直很困惑,因為我使用PHP創建數據並使用JavaScript來“繪制”頁面,是否還有NodeJS在做邏輯,前端javascript在創建所有元素,還是現在做所有這些工作? ? 很抱歉,這方面的知識不足...

這絕對是Node可以提供改進的領域。

簡短的版本:在前端使用websocket,在后端使用常規套接字,或者使用API​​,則可以避免全面輪詢新數據。

長版:

  • 前端:

您可以通過實現websocket來消除所有對輪詢腳本的需求。 這樣,一旦新數據到達服務器,您就可以將其廣播到所有連接的客戶端。 我建議Socket.ioPrimus websocket包裝器。 兩者都非常易於實現,並且對於您想要實現的功能非常強大。

所有數據處理邏輯都應在服務器上發生。 然后,數據將發送到客戶端,並應呈現在現有頁面上,這基本上是客戶端應包含的唯一邏輯。 有一些框架可以為您完成所有這些工作(例如Sails ),但是我沒有任何這些框架的經驗,因為它們需要您根據他們的規則來編寫整個應用程序,我個人不喜歡(但我知道很多開發人員都這樣做)。

如果您想在沒有龐大框架的情況下在客戶端中呈現數據,我強烈建議您使用輕量級但非常有用的Transparency呈現庫。 使用此方法,您可以使用Node格式化服務器上​​的Javascript對象,對其進行JSONify處理,然后將其發送到客戶端,然后客戶端要做的就是對其進行反JSON化處理並調用Transparency的.render

  • 后端:

這取決於您對需要檢查的實例的行為有多少控制權。 我假設您有一些控制權,因為您可以使用不錯的JSON格式獲取其所有數據。 因此,有多種選擇。

  1. 您可以經常輪詢。 這是最簡單的解決方案,因為它不需要更改外部服務。 Javascript setInterval函數在這里非常有用。 根據與實例的連接方式,您可能可以使用諸如Request之類的模塊來執行實際的請求,這樣可以省去一堆繁重的工作。

    同樣在您的Node應用程序中實現輪詢的好處是,您將在Node應用程序中接收數據,這樣,即使在將數據插入數據庫之前,也可以立即將其廣播給客戶端。 這將大大減少數據庫查詢的數量。

  2. 輪詢的替代方法是設置一個簡單的基於Express的API,在該API中,應用程序可以像您所說的那樣發布其“問題”。 這樣,您的應用程序將在出現問題時得到通知,並與客戶端的websockets連接相結合,這實際上將導致實時更新。

    為了更加冗余,您將在API旁邊有一個輪詢計時器,以便您可以檢查實例,以防萬一發生錯誤導致實例不再發送任何數據。

    更高級別的API的替代方法是只使用直接套接字通信,這基本上是相同的方法,只是使用了不同的功能集。

  3. 最后,您還可以保留基於PHP的輪詢腳本。 這將是最有效的解決方案,因為您不會去替換所有東西。 然后,從使用websocket連接到客戶端的Node應用程序中,您可以設置一個間隔,每隔一段時間查詢一次數據庫並廣播更新。 這仍然會大大減少查詢的數量,因為無論連接了多少個客戶端,都只會有一個查詢,然后將其響應發送到所有連接的客戶端。

希望我的帖子為您提供一些有關如何使用Node實施應用程序的想法。 盡管我只是一個開發人員,但請記住,這就是我在Node中構建應用程序的方式。 肯定會有其他人有不同的意見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM