創建一個基礎的http服務來查看運行中的進程
我們可以依賴這個方式舒服地在應用程序中使用REPL實例進行調試。現在來實踐一下,使用創建的REPL客戶端來連接伺服器進行交互,來調試一個現有的程序。
首先,創建一個基礎的http服務:
這看起來很熟悉,但是需要添加以下代碼來暴露一個服務給REPL伺服器.
允許腳本在全局的上下文和獨立的上下文中執行。
把我們的服務實例暴露給REPL。
當開啟的時候,無論何時你創建一個新的變數(如var a=1),它會存放到全局的上下文中(global.a===1)。但是a現在也可以在待會的事件循環的函數中訪問到。
我們通過在r.context上設置一個屬性來暴露server給外部。我們可以暴露任何想要的東西給到REPL以便可以進行交互。有一個重要的點需要留意的是,我們可以覆蓋已經在context的任意值。這包括所有標準的Node全局變數,如global,process,or Buffer。
$ node repl-app.js
server listening on 3000
repl listening on 1337
現在讓我們使用REPL客戶端來連接到伺服器:
$ node repl-client.js
我們現在就可以獲取有用的信息。例如,我們可以查看進程已經運行了多久,以及使用了多少內存:
> process.uptime()
115
> process.memoryUsage()
heapTotal: 7195904,
heapUsed: 4146840 }
運行時間,單位秒。
內存用量,單位bytes。
因為我們暴露了server對象,所以可以通過輸入server來進行訪問:
顯然,如果這是在生產環境中的話會更加有趣,因為只有我們自己會使用這個伺服器,而且我們還沒有創建連接。我們在瀏覽器中打開http://localhost:3000然後輸入命令來查看值是否有變化:
> server.connections
6
瀏覽器/客戶端的連接變化。這生效了。我們來看一些更加複雜的情況。你能夠想到一種使用REPL來記錄進入到我們伺服器請求數的方法么?
REPL強大的一個方面是可以添加描述來幫助我們理解應用運行中的一些行為。這對於處理棘手問題是特別方便的,例如這種情況:重啟應用時會丟失先前的狀態,我們沒有辦法重現問題,只能等待它再次發生。因為我們的http是繼承於EventEmitter的,我們可以使用REPL來添加另外一個請求處理方法,它會在每一次請求時被調用,來增加我們想要的行為:
創建變數來存儲請求數量。
為進來的請求創建處理方法,用於增加請求計數。
添加處理方法到請求事件中。
現在我們可以跟蹤進來的請求了。我們在瀏覽器刷新幾次後來看看它是否能夠正確運行:
8
因為我們可以訪問到請求對象,所以我們可以獲取請求中任意對我們有用的信息:IP地址,頭部信息,路徑等等。在這個例子中我們對外暴露了一個http伺服器,但是任意在你應用中有意義的對象都可以放到context中。你可能甚至想到編寫一個模塊在REPL中暴露一些常用的方法。


※對Node應用進行性能分析
※Node處理未捕獲的異常
※顯式和隱藏異常及錯誤參數
※一個測試web應用程序的Mocha測試
TAG:行家匯 |
※SpringCloud實戰開發系列課程-創建部門微服務
※在c#中創建Windows服務
※打開Wifi以及與Hal層服務建立連接的流程
※如何查看 Linux 中所有正在運行的服務
※Gmail 改版:外觀大變樣,進一步支持 Google 服務
※Volume Shadow 服務在滲透測試中的幾種利用姿勢
※Google Project Fi得到了一個改進的VPN服務
※Open Platform,全球首個為應用程序服務的區塊鏈基礎支付平台
※談談微服務架構中的基礎設施:Service Mesh與Istio
※使用Node、Coinbase、比特幣和Okta構建自己的結賬服務
※下一代的微服務架構基礎是ServiceMesh?
※iPhone和Apple服務推動了該公司有史以來最大的第三季度財報
※Royal Caribbean游輪將在船上提供VR服務 給遊客不一樣的體驗
※Netflix 的微服務演進之路
※邊做邊學,基於Spring Cloud的微服務架構最佳實踐
※Systemd 服務:比啟動停止服務更進一步
※Befund提出「道斯服務DAOS Service:一種全新的商業服務形態」
※Facebook面向全球用戶開放Watch視頻服務
※ChinaBang Awards 2018 年度企業服務:這些創新,讓企業跟上了時代的節奏
※使用Docker運行常見的Web服務與管理