连接到 express.js 的 Socket.io 错误

新手上路,请多包涵

我正在尝试将 socket.io 和 express.js 连接在一起:

 var socket = require('./socket_chat/socket.js');

var express = require('express'),
    app = module.exports.app = express();

    var io = require('socket.io').listen(app);

    app.use(express.static(__dirname + '/app'));

io.sockets.on('connection', socket);

在该行: var io = require('socket.io').listen(app); 我收到一个错误:

 Error: You are trying to attach socket.io to an expressrequest handler function. Please pass a http.Server instance.

SO/google 上似乎没有关于此错误的任何信息…

原文由 alyx 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 620
2 个回答

您可以在不使用 http 模块的情况下完成

app.listen 返回可用于 socket.io 的服务器实例

const express = require('express');
const app = express();
const server = app.listen(port, () => {
    console.log("Listening on port: " + port);
});
const io = require('socket.io')(server);

原文由 Tagada 发布,翻译遵循 CC BY-SA 4.0 许可协议

您应该使用 http 模块:

 var http = require('http');
var express = require('express'),
    app = module.exports.app = express();

var server = http.createServer(app);
var io = require('socket.io').listen(server);  //pass a http.Server instance
server.listen(80);  //listen on port 80

//now you can use app and io

您可以在文档中找到更多详细信息: http://socket.io/docs/#using-with-express-34

原文由 Oleg 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏