2013-01-16 15 views
2

我有以下設置,根據文檔:如何正確設置socket.io端口?獲得socket.io.js 404

客戶端:

<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),然後我得到warn: error raised: Error: listen EACCES和相同的404.我在這裏錯過了關於端口使用情況的內容?

回答

8

如果沒有特殊權限,則無法在端口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 
}); 
+0

沒有足夠的向上票世界在此表示感謝!我現在一直在努力...只有一個問題,我認爲套接字需要自己的端口,這是不正確的?它必須運行相同的應用程序? – ilyo

+0

我用'sudo'在端口80上運行它 – ilyo

+3

我不建議sudo'ing nodejs進程。取而代之的是,使用像nginx或haproxy這樣的前端代理服務器(關於該主題的教程很多)。 – schaermu

相關問題