【问题标题】:Nodejs with socket.io on heroku在heroku上使用socket.io的Nodejs
【发布时间】:2023-03-23 21:55:01
【问题描述】:

我正在尝试在 heroku 上使用 express 和 socket.io 运行 nodejs 应用程序,结果出现此错误

EACCESS,权限被拒绝

当我尝试运行以下代码时:

app.configure(function () {
   app.set('port', process.env.PORT || 3000);
});
var server = http.createServer(app).listen(app.get('port'))
io = require('socket.io').listen(server); // it crashes on this line
io.configure(function () {
    io.set("transports", ["xhr-polling"]);
    io.set("polling duration", 10);
    io.set("log level", 1);
});

甚至可以在heroku上做到这一点吗?

依赖:

"socket.io": "*",
"express": "3.0.0rc4",

【问题讨论】:

    标签: javascript node.js heroku socket.io


    【解决方案1】:

    查看此链接:using socket.io with node.js on heroku

    [更新 1]

    查看此answer,我认为它可以帮助您解决问题。

    [更新 2]

    一个有工作代码的link to a question(不管客户的错误,问题本身的动机)。

    var port = process.env.PORT || 3000;
    
    var app = require('express').createServer()
    var io = require('socket.io').listen(app);
    
    app.listen(port);
    
    // Heroku setting for long polling
    io.configure(function () { 
        io.set("transports", ["xhr-polling"]); 
        io.set("polling duration", 10); 
    });
    
    // To set handlers for data received, etc ... use io.sockets.on('...', ...)
    

    【讨论】:

    • 我认为我只能使用 process.env.PORT (那是 heroku 分配给我的端口),否则我只会得到不同的错误,因为我使用了一些随机端口
    • 我不认为该链接可以帮助我,因为所有这些都在 .listen() 之后
    • 最后一段代码使用 express 2.x,而我使用的是 3.x(不记得为什么,2.x 有问题)。但是是的,也许某处存在问题,但我仍然不知道它是什么或如何解决它:)
    【解决方案2】:

    当你:

    io = require('socket.io');
    app.configure(function () {
       app.set('port', process.env.PORT || 3000);
    });
    var server = http.createServer(app).listen(app.get('port'))
    io.listen(server); // it crashes on this line
    io.configure(function () {
        io.set("transports", ["xhr-polling"]);
        io.set("polling duration", 10);
        io.set("log level", 1);
    });
    

    我意识到不应该做任何不同的事情,但我只是好奇。

    【讨论】:

      【解决方案3】:

      您可能只是在同一个端口上启动了 2 台服务器 - 您的 app(快速服务器)和这台 server = http.createServer(app).listen(app.get('port'))

      试着写这个

      server = http.createServer(app).listen(/*port not from app*/)
      

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2014-09-20
        • 2017-12-11
        • 2014-11-08
        • 2019-11-15
        • 2014-06-27
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多