2015-05-18 72 views
0

我正在尝试创建一个并行运行的服务器。我有两个主要的担忧:NodeJS导出阻止代码

  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); 
} 

基本上,这个服务器将非常大,我不能有行代码成千上万都坐在一个文件。通过分解,我会以任何方式损害性能,这是否会导致任何阻止代码,服务器是否会跟踪正确的客户端以响应?

我还是非常新的节点和JavaScript的一般,所以也许我很想理解基本概念如何工作。任何建议或改进将是一个很大的帮助!

+0

这些都不是问题。 – SLaks

回答

0

对于关注点#1,您所发布的代码中没有任何代码被阻止,但您有权关注此问题。节点是单线程的,编写阻塞或需要很长时间计算的代码在节点中是一个坏主意。好消息是节点非常异步。虽然可以在节点中编写阻止代码,但是常用库的设计方式不同,但您必须自行编写阻止函数。

这SO答案有很多很好的细节,以帮助包装你的头周围:https://stackoverflow.com/a/14797359/77501

关注#2,我不知道你的意思。你是否担心会调用一个SQL异步回调函数,以致某个res var以某种方式指向别人的请求?

关于最底层的blurb,如果在一个文件中包含所有代码,就不会对性能产生明显的影响。如果任何应用程序可能启动的速度稍微快一点,因为它将加载更少的模块。

由于其他原因,将大量代码压缩到单个文件中是一个糟糕的主意。将代码拆分为模块将使您的代码更加可重用,从而使您可以更少地编写代码。代码越少越好。通过将您的数千行代码分解为所有“一件事情都做好”(又称凝聚力)的模块,将使您的代码更容易理解,更容易构建,更容易调试。