如何使用socket.io与express.js(使用Express Application Generator)结合使



我正在尝试使用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 App
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。

对于仍然想要使用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)
})

最新更新