[英]NodeJS Exports Blocking Code
我正在嘗試創建並行運行的服務器。 我有兩個主要問題:
這是我的代碼:
服務器文件:
var http = require('http');
var controller = require('controller.js');
http.createServer(function (request, response) {
controller.handle(request, response);
}).listen(8080, '0.0.0.0');
控制器文件
var resp = require('./resp.js');
var sqltest = require('/sql/sqltest.js');
exports.handle = function(request, response) {
request.on('data', function(chunk) {
var json = JSON.parse(chunk);
var type = parseInt(json["requestType"]);
switch(type) {
case 0:
sqltest.try(json, function(res){
resp.send(response, res);
});
break;
}
});
}
SQL測試文件
var mysql = require('mysql');
exports.try = function(json, callback, res) {
-- doo database stuff --
callback(res);
});
}
回應檔案
exports.send = function(response, res){
response.writeHead(200, ......);
response.end(res);
}
基本上,該服務器將變得非常龐大,我無法將成千上萬的代碼行全部放在一個文件中。 通過拆分它,我是否會以任何方式損害性能,是否會導致任何阻塞代碼,服務器是否會松懈對正確客戶端的響應?
總的來說,我對Node和javascript還是很陌生,所以也許我想念基本概念是如何工作的。 任何建議或改進都會有很大幫助!
對於關注點1,您發布的代碼都沒有阻塞,但是您對此感到擔心是正確的。 Node是單線程的,因此編寫阻塞的代碼或花費很長時間進行計算的代碼在Node中是個壞主意。 好消息是節點非常面向異步。 盡管可以在節點中編寫阻塞代碼(這是通用庫的設計方式),但您必須竭盡全力編寫阻塞函數。
這樣的答案有很多很好的細節,可以幫助您繞開它: https : //stackoverflow.com/a/14797359/77501
對於問題2,我不確定您的意思。 您擔心SQL異步回調會被調用為res
var以某種方式指向其他人的請求嗎?
關於底部的內容,將所有代碼包含在一個文件中不會對性能產生明顯影響。 如果有任何問題,您的應用程序可能會啟動得更快,因為它將加載較少的模塊。
由於其他原因,將大量代碼擠入一個文件是個壞主意。 將您的代碼分成模塊將使您的代碼更具可重用性,從而使您可以編寫更少的代碼。 代碼越少越好。 通過將成千上萬的代碼拆分為可以“一件事做好”(又稱內聚性)的模塊,從而為它們提供清晰的體系結構,這也將使您的代碼更易於理解,更易於構建和調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.