2016-11-22 83 views
0

我試圖使用Socket.io與Express.JS結合使用(使用Express應用程序生成器)。
我發現了一些aswers如何做到這一點(Using socket.io in Express 4 and express-generator's /bin/www)。
我的問題是,我無法使用路由文件夾內的套接字。 我可以在app.js和bin/www.js文件中使用它們。當我調用index.js路由時,它只是不停地加載網頁很長一段時間而不會給出任何錯誤。

倉/ www.js如何將Socket.io與Express.JS結合使用(使用Express應用程序生成器)

... 
/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

var io  = app.io 
io.attach(server); 
... 

app.js

... 
// Express 
var app = express(); 

// Socket.io 
var io = socket_io(); 
app.io = io; 
var routes = require('./routes/index')(io); 
... 

路由/ index.js

module.exports = function(io) { 
    var app = require('express'); 
    var router = app.Router(); 

    io.on('connection', function(socket) { 
     console.log('User connected'); 
    }); 

    return router; 
} 
+0

我的回答下面有幫助嗎?任何意見?如果它對你有幫助,那麼你可以考慮[接受答案](http://meta.stackexchange.com/a/5235/157646),以便其他搜索它的人可以看到它有一個被接受的答案。 – rsp

回答

2

下面是關於如何一個簡單的例子使用Socket.io表達我提供GitHub上的位置:

的後端代碼是這樣的:

var path = require('path'); 
var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
app.get('/', (req, res) => { 
    console.error('express connection'); 
    res.sendFile(path.join(__dirname, 'si.html')); 
}); 
io.on('connection', s => { 
    console.error('socket.io connection'); 
    for (var t = 0; t < 3; t++) 
    setTimeout(() => s.emit('message', 'message from server'), 1000*t); 
}); 
http.listen(3002,() => console.error('listening on http://localhost:3002/')); 
console.error('socket.io example'); 

https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js

正如你所看到的,我創建快遞應用:

var app = require('express')(); 

然後,我創建與該應用程序的HTTP服務器:

var http = require('http').Server(app); 

最後我用的HTTP服務器創建Socket.io實例:

var io = require('socket.io')(http); 

運行後:

http.listen(3002,() => console.error('listening on http://localhost:3002/')); 

它一起工作。

您可以看到GitHub上的整個示例,其後臺代碼和前端代碼都可以工作。它目前使用Express 4.14.0和socket.io 1.4.8。

相關問題