【问题标题】:How to start multiple node/socket servers on one machine如何在一台机器上启动多个节点/套接字服务器
【发布时间】:2013-11-21 21:43:18
【问题描述】:

我正在不同的端口上启动两个不同的节点服务器,但我仍然收到以下错误。

info  - socket.io started
info  - FlashPolicyFileServer received an error event:
    listen EADDRINUSE

这就是我启动第一台服务器的方式:

"use strict";

var 
    express = require('express'),
    app = module.exports = express();

// set some config vars

var 
    server = require('http').createServer(app),
    socket = require('./app/lib/socket');

// these settings are common to both environments
app.configure(function () {
    // configuration left out
    app.use(app.router);

});

//  Load the routing
require('./app/routes')(app);
// run the server with socket.io
server.listen(3001);
socket.listen(server, session, app);

我以完全相同的方式启动第二台服务器,除了倒数第二行更改为:

server.listen(3002);

socket.io 在另一个文件中是这样启动的

exports.listen = function (server, sessionStore, app) {
    var io = require('socket.io').listen(server);
    ...

不确定如何修复此错误。

【问题讨论】:

  • 我个人从来没有遇到过这个问题,但问题似乎是由 socket.io 启动的闪存策略服务器。如果您不使用闪存传输,或者如果您要运行自己的策略服务器,则可以禁用它。否则,您可以为每个应用程序配置其端口,或者根据文档,将 -1 作为策略服务器端口选项传递,以告诉 Flash 客户端通过与应用程序相同的端口进行连接。更多信息可以在 socket.io wiki configuring section 中找到

标签: javascript node.js express socket.io


【解决方案1】:

Flash 策略端口默认为 10843,因此两个应用程序都会尝试在此端口上运行它,这就是您遇到的错误。删除传输,或使用设置端口

io.set('flash policy port', 3005)

或者您可以完全删除该传输:

io.set('transports', [
    'websocket',
    'xhr-polling',
    'htmlfile',
    'jsonp-polling'
]);     

【讨论】:

  • 嗯,原因在@numbers1311407 的评论中解释。如果有人在评论中留下答案,请随时在您的答案中使用它;这是免费代表!
  • @forivall 如果我看到评论我会拥有的 :)
猜你喜欢
  • 2013-10-08
  • 2011-11-24
  • 2018-04-05
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多