【问题标题】:Error EADDRINUSE when requiring socket.io server through multiple files通过多个文件要求 socket.io 服务器时出现错误 EADDRINUSE
【发布时间】:2019-04-23 19:38:34
【问题描述】:

我正在尝试通过多个节点脚本导出 socket.io 服务器,这样我就可以在同一个端口上发出通知。

这是我的主要 server.js 文件代码:

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

const options = {};

var server = http.createServer(app);
var io = require('socket.io').listen(server);
exports.io = io;

server.listen(3000, function()  {
    console.log('Node.js Global app is running...');
});

当我尝试要求 server.js 时,其他节点脚本正在运行,我收到此错误:

错误:监听 EADDRINUSE 0.0.0.0:3000

server_tn.js

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

var code_pays = path.basename(__dirname);
console.log('Node.js app is running...' + code_pays);

var main = require('./../main.js');
var importIo = require('./../server');
var io = importIo.io;

main.mainTraitement(code_pays);

【问题讨论】:

  • 您正在导出网络服务器,而不是网络服务器的实例。您可能想共享一个实例。顺便说一下,您应该使用请求来访问您的网络实例,这是我认为最可重用的方式。
  • 是否可以导出网络服务器实例?
  • 在打开无用线程之前搜索呢? stackoverflow.com/a/28051798/8126612
  • 问题是当我需要 socket.io 使用 var io = require('socket.io')(3000); 我得到错误 Error: listen EADDRINUSE :::3000

标签: node.js socket.io


【解决方案1】:

您不能让多个程序监听一个特定端口。 检查您是否有任何程序在监听 3000 端口,或者您的 main.js 上是否也在监听 3000 端口。

【讨论】:

  • 我正在运行一个节点服务器 (server.js) 监听端口 3000,但我想要在多个文件 (server_tn.js) 中使用此实例,所以我无法发出通知使用 socket.io 到节点客户端
猜你喜欢
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 2011-06-29
  • 2020-07-16
  • 2020-06-16
  • 1970-01-01
相关资源
最近更新 更多