【发布时间】:2017-06-08 12:24:10
【问题描述】:
我正在尝试在我的网站上设置 socket.io,但服务器记录了一个错误,指出该端口已在使用中(我将其设置为与我的服务器相同)。我正在使用 Express。
如果我将其设置为不同的端口,我会收到“net::ERR_CONNECTION_CLOSED”错误。
我该如何解决这个问题?
【问题讨论】:
我正在尝试在我的网站上设置 socket.io,但服务器记录了一个错误,指出该端口已在使用中(我将其设置为与我的服务器相同)。我正在使用 Express。
如果我将其设置为不同的端口,我会收到“net::ERR_CONNECTION_CLOSED”错误。
我该如何解决这个问题?
【问题讨论】:
您可能正在创建(显式或隐式)两个独立的 HTTP 服务器实例,它们应侦听同一端口,因此第二个实例将引发错误,因为第一个实例已占用该端口。
相反,您可以在 Express 和 socket.io 之间共享同一个 HTTP 服务器,因此将只有一个 HTTP 服务器同时处理两者:
const express = require('express');
const app = express();
const server = app.listen(3000); // or whatever port you want
const io = require('socket.io')(server);
app.listen(...) 返回 Express 将为您创建的 HTTP 服务器实例。您可以通过将其传递到其构造函数(由require('socket.io') 返回)来为socket.io 重用该实例。
【讨论】:
require('socket.io')(3001),因此socket.io 服务器将监听 3001 而不是 3000。但是,我没有看到这样做的好处,它更容易在同一个端口上运行它们。