如何运行多个node.js服务器

时间:2015-04-10 12:36:32

标签: node.js express socket.io

我有两台Express服务器在不同的端口上运行。第一个服务器(Web服务器)提供一个网站,第二个服务器(数据服务器)使用socket.io每100毫秒发送一次数据。 当我在浏览器中打开网站时,数据按预期显示。但是当我在第二个浏览器中打开网站时,第一个浏览器中发出的所有数据都会显着减慢,直到第二个浏览器加载完网站为止。

我应该提一下应用程序是在Raspberry Pi上运行的。网站加载时间不是那么关键,但数据发布是。

有没有办法运行node.js服务器,这样它们就不会受到彼此负载的影响?

现在,Web服务器位于由节点运行的主app.js文件中,数据服务器是Web服务器所需的模块。像这样:

app.js:

var express = require('express');
var data = require('data-server.js');

var app = express();

// Web server setup and handling (mostly Express defaults)

app.listen(3000);

module.exports = app;

数据server.js:

var app = require('express')();
var server = require('http').Server(app).listen(3001)
var io = require('socket.io')(server);

// Socket.io code that emits data every 100 ms

module.exports = io;

更新

原来是我的数据库查询一直保留在节点上,因此它无法发出,因为发射功能正在等待数据库空闲。

1 个答案:

答案 0 :(得分:4)

您应该对常规HTTP流量和websocket流量使用相同的端口和相同的节点进程。它可以最大限度地降低对树莓派的性能影响。示例:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});