【问题标题】:NodeJs Error: Port already in use:3000 using socket.io and expressNodeJs 错误:端口已在使用中:3000 使用 socket.io 和 express
【发布时间】:2022-02-11 22:43:29
【问题描述】:

我正在制作一个使用 socket.io 和 express 的 node.js 应用程序。

代码如下-

const express=require('express');
const app=express();
const http=require('http').Server(app);
app.use(express.static('public'));

const io=require('socket.io')(http,{
  cors:{origin:'*'}
});

http.listen(3000,()=>{
  console.log('listening to port 3000');
});

//when connection made 
io.on('connection',(socket)=>{
  console.log('connection made!');
});

这里,public 是一个文件夹,包含网站的所有 html 文件。

现在,当我在我的电脑上本地运行它时,它工作正常 但是当我在 glitch.com 服务器上部署它时,我得到了这个错误:

Error: listen EADDREINUSE: address already in use :::3000

据我所知,3000 是故障中唯一可用的端口,我无法使用其他端口。

此外,与此主题相关的堆栈溢出问题对我没有帮助,因为大多数答案都与杀死正在运行的任务本身有关,而我无权在服务器上这样做。

【问题讨论】:

    标签: javascript node.js express socket.io port


    【解决方案1】:

    这种情况经常发生在你的服务器还在运行错误的时候,尝试切换监听3001看看是否还有错误

    【讨论】:

    • 只有 3000 端口可用于故障
    • 尝试运行这个taskkill /f /im node.exe
    • 也没用
    【解决方案2】:

    释放你的 3000 端口:

    Linux: fuser -k 3000/tcp

    【讨论】:

    • 在我托管的 glitch.com 服务器上没有权限
    【解决方案3】:

    根据 glitch.com 论坛上的this question,您可能有两个服务在监听同一个端口,但情况似乎并非如此。

    您还应该能够通过在 .env 文件中设置 PORT 环境变量来更改默认侦听端口(如果有的话)。尝试不同的端口应该可以解决问题

    编辑: 显然问题可能是服务器的初始配置,您可以尝试像这样设置所有内容:

    const app = require('express')();
    const server = require('http').createServer(app); <--
    const io = require('socket.io')(server);
    io.on('connection', () => { /* your code */ });
    
    server.listen(process.env.PORT, () => {/* your code */});
    

    (从socket.io github page得到这个)

    如果这不起作用,您应该尝试在glitch.com's support forums 上提问,他们的一位技术人员会帮助您更好地解决您的问题,他们拥有所有必要的工具

    【讨论】:

    • 问题在于我无法更改端口,因为故障只允许全局访问一个端口(即 3000)。如果您认为我可以使用任何其他 NodeJs 服务器,请建议我
    • 另外,我已经将这里的代码浓缩为重要的部分。你可以在这里查看完整代码glitch.com/edit/#!/ping-pong01
    • @Rajjaiswal 据我了解,3000 只是默认端口,您可以使用 env 文件更改它,但我从未使用过 glitch.com。我会检查你的代码
    • @Rajjaiswal 我尝试了您的代码,但端口重复似乎没有任何问题。我建议你尝试两件事:第一行console.log(process.env.PORT),这应该告诉你启用了哪个端口。然后尝试通过在项目中设置环境来更改它(在项目的根目录中创建一个名为.env 的文件并写入PORT=8080 或您想尝试的任何端口,故障应该会自动切换(您需要安装dotenv从 npm 和 require() 它在你的代码中))
    • 哦,我终于做到了。事实证明,服务器代码没有错误。使用 io() 函数连接客户端时,我只是有错误的参数。此外,该错误是因为该项目已经在运行,我尝试重新运行它导致错误。很抱歉浪费了你的时间和这么愚蠢。
    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 2015-04-03
    • 1970-01-01
    • 2022-01-10
    • 2019-10-28
    • 1970-01-01
    • 2018-03-07
    • 2019-11-09
    相关资源
    最近更新 更多