【问题标题】:How to correctly set socket.io ports? Getting socket.io.js 404如何正确设置 socket.io 端口?获取 socket.io.js 404
【发布时间】:2013-01-16 07:55:40
【问题描述】:

根据文档,我有以下设置:

客户端:

<script src="/socket.io/socket.io.js"></script>
var socket = io.connect(); // TIP: .connect with no args does auto-discovery

服务器端:

var express = require('express'),
    routes = require('./routes'),
    user = require('./routes/user'),
    http = require('http'),
    path = require('path');
    app = express(),
    server = http.createServer(app).listen(80),
    io = require('socket.io').listen(server);


app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));
});

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});

我为什么会得到

GET http://localhost:5000/socket.io/socket.io.js 404 (Not Found)

我尝试切换到server = http.createServer(app).listen(process.env.PORT || 3000), bu,然后我得到warn: error raised: Error: listen EACCES 和相同的 404。关于端口使用,我在这里缺少什么?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    如果没有特殊权限,您无法在端口 80 上创建服务器。在另一个旁注中,您正在尝试创建 2 个服务器(一个在端口 80 上,另一个在端口 3000 上)。

    这是我在项目中使用的(部分)内容:

    var express = require('express')
      , app = express()
      , server = require('http').createServer(app)
      , sio = require('socket.io').listen(server)
    
    app.configure(function(){
        app.set('port', process.env.PORT || 3000);
        app.set('views', __dirname + '/views');
        app.set('view engine', 'jade');
        app.use(express.logger('dev'));
        app.use(express.bodyParser());
        app.use(express.methodOverride());
        app.use(app.router);
        app.use(express.static(path.join(__dirname, 'public')));
    });
    
    // configure your socket.io instance here
    
    server.listen(app.get('port'), function() {
      // server started
    });
    

    【讨论】:

    • 世界上没有足够的赞成票来表达我的感激之情!我一直在为此苦苦挣扎……只有一个问题,我认为套接字需要它自己的端口,这不是真的吗?它必须和应用程序一样运行吗?
    • 我使用sudo在80端口运行它
    • 我不建议使用 sudo'ing nodejs 进程。取而代之的是,使用 nginx 或 haproxy 之类的前端代理服务器(有很多关于该主题的教程)。
    猜你喜欢
    • 2013-04-26
    • 2017-02-02
    • 2013-05-21
    • 2013-06-03
    • 2013-11-06
    • 2018-02-13
    • 2013-07-18
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多