我正在尝试使用socket.io与express.js(使用Express Application Generator)。
我找到了一些ASWERS方法(在Express 4和Express-Generator的/bin/www中使用socket.io)。
我的问题是我无法使用路由文件夹中的插座。我可以在app.js和bin/www.js文件中使用它们。当我调用路由索引。JS时,它只会在很长一段时间内一直加载网页而没有任何错误。
bin/www.js
...
/**
* 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;
}
这是一个简单的示例
- https://github.com/rsp/node-websocket-vs-socket.io
后端代码是:
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
您可以在这里看到,我正在使用:
创建Express Appvar 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。
对于仍然想要使用socket.io和Express HTTP请求的任何人。最简单的方法是将HTTP服务器的两个Seprate实例列出到不同的端口。1对于Websocket,第二个用于API请求。
const express = require("express");
const app = express();
const httpServer = require("http").createServer(app);
const io = require("socket.io")(httpServer, {
path: '/'
});
// routes and io on connection
httpServer.listen(5000, () => {
console.log("Websocket started at port ", 5000)
});
app.listen(3000, () =>{
console.log("Http server listening at", 3000)
})