javascript - 如何结合使用 Socket.io 和 Express.JS(使用 Express 应用程序生成器)

标签 javascript node.js express socket.io

我正在尝试结合使用 Socket.io 和 Express.JS(使用 Express 应用程序生成器)。
我找到了一些如何执行此操作的答案 ( Using socket.io in Express 4 and express-generator's /bin/www )。
我的问题是我无法使用 routes 文件夹内的套接字。 我可以在 app.js 和 bin/www.js 文件中使用它们。当我调用路由 index.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);
...

routes/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;
}

最佳答案

这是一个关于如何将 Socket.io 与 Express 结合使用的简单示例,我在 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

正如您在这里看到的,我正在创建 express 应用:

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。

关于javascript - 如何结合使用 Socket.io 和 Express.JS(使用 Express 应用程序生成器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747828/

相关文章:

javascript - 为什么以下函数的参数被忽略?

node.js - 如何在 Node/套接字应用程序中验证 laravel passport api token ?

Node.js Express.js : Getting the body of a sent response

javascript - 在 Python 中使用 Selenium 提交表单

javascript - 获取要更改的文本

javascript - 你能像 String.fromCharCode 一样使用 String.fromCodePoint 吗

javascript - Node.js 请求下载文件有时为空或不存在

node.js - 路由到一台服务器上的不同node.js express-apps

javascript - Express.js 请求主体 __proto__

json - 发布 json 来表达 - 无效的 json