簡體   English   中英

NodeJS導出阻止代碼

[英]NodeJS Exports Blocking Code

我正在嘗試創建並行運行的服務器。 我有兩個主要問題:

  1. 某些方面正在阻止,並且將停止處理另一個請求
  2. 請求混合在一起,錯誤的響應傳遞給錯誤的客戶端。

這是我的代碼:

服務器文件:

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.

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