Node.js 讓 JavaScript 可以寫平臺,有 console
很正常,為什麼官網還要特定為它寫一個 API 呢?希望在我寫完這篇時得到解答。
API 尋寶記在 iT邦幫忙鐵人賽 一天介紹一、兩個 API 會說不完,因此這個系列介紹會調整成拿我常用 + 有興趣的部分出來寫,沒介紹的部分會在我個人的 Blog 中補齊。
這系列結束會介紹其他 Node.js 相關的工具和資料,因為翻來翻去深入一點的介紹中文很少,所以想看到實作的朋友建議你可以看看其他邦友系統文章,如
以上是最近可能會去走跳的部分 XDD
翻開 API 文件發現 Console 非常的訝異,所以想說來了解一下和我認識的 Console 有什麼不一樣?提供的 Console 內容有,
console.assert(value[, message][, ...args])
console.dir(obj[, options])
console.error([data][, ...args])
console.info([data][, ...args])
console.log([data][, ...args])
console.time(label)
console.timeEnd(label)
console.trace(message[, ...args])
console.warn([data][, ...args])
然後翻開 MDN JavaScript 的 Console 文件 可以發現少了不少內容,此時我才想起 Node.js 雖然實現 JavaScript 寫平臺,但核心是 C++ ,處理 Console 實際是借 stdout 、 stderr 來實現!這下我可終於了解官網特地介紹 Console 的原因。而 Console 預設已經載入在全域裡,因此在使用時可以不必寫 import console from 'Console'
或 var console = require('console')
,若想自訂 Console 可以看官方 new Console 的 Example Code ,若有不了解可以在底下留言給我。
大誤會!從 API 文件顯示早在 Node.js v0.6.0 就開始支援多行程,至於當時的功能完善程度,時間有些久遠容我偷懶,若有前輩知道還希望能提供資訊給我。
官方 Example Code 提供使用方法,
// app.js 的內容
// 載入多行程與 HTTP 兩個 Module
const cluster = require('cluster');
const http = require('http');
// 載入 os Module 取得電腦 CPU 的數量
const numCPUs = require('os').cpus().length;
// 若 process.env.NODE_UNIQUE_ID 是 undefined ,表示目前 Master
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
// 這裡的 fork 使用的是 child_process.fork()
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
}
不過我也沒有用過 Node.js 多執行緒,原因是覺得不方便。因此多執行緒我會透過 PM2 的方式實現與管理。使用 PM2 的好處是
以官方 Example Code 使用所有 CPU ,換到 PM2 改為
// app.js 的內容
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
執行時從 node app.js
改為 pm2 start app.js -i max
,若只希望執行 2 個行程只要將 max 改為 2 ( pm2 start app.js -i 2
) 即可。是否覺得 PM2 的設定更友善呢?
大大,請問...走跳(不懂這個意思)
請開釋...orz
可以解釋成 光顧,這詞記得來自 台語 ,國語辭典查不到 XDD
( 突然要解釋還真不知道怎麼說才到味 :p )
補充一下,cluster不是多執行緒,是多行程(process)。
立馬修正,感謝 fillano !
寫得時候一直在想是行程、執行緒?執行緒是 thread ,行程是 process。(偷懶沒查資料,出包了 :p)