【问题标题】:socket.io problem while connecting to room and errors appearing连接房间时出现socket.io问题并出现错误
【发布时间】:2020-02-05 22:10:28
【问题描述】:

我在与 socketIO 通信时遇到问题。

  • 第一个问题是我无法与另一个房间通信。而且我没发现问题。

  • 第二个问题是以下消息:index.js:83 WebSocket connection to 'ws://localhost:3000/socket.io/?EIO=3&transport=websocket&sid=PgUdXusyROLcKuieAAAI' failed: Error during WebSocket 握手:意外响应代码:400

  • 第三个问题与前一个类似,似乎同时触发:VM845:1 POST http://localhost:3000/socket.io/?EIO=3&transport=polling&t=MshuGZf&sid=fmIhjcRjS7yv-oeBAAAG 400 (Bad Request)

  • 第四个问题:MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个警告监听器。 -> 对于这个,我可以增加限制,但我认为这不是一个好主意……

您可以在上面找到我的代码:

app.js

var server;

app.use((req, res, next) => {

  const io = require('socket.io')(server);
  var room;

  io.on('connect', function(socket){

    socket.on('room', function(room) {
      socket.join(room);
      console.log('Connected to room :' + room)
    });

    socket.on('chatMessage', function(msg){
      console.log('here :' + room + " - " + msg)
      socket.to(room).emit('chat message', msg);
    });

  });

  next();
});

mongoose
  .connect(MONGODB_URI)
  .then(result => {
    server = app.listen(process.env.PORT || 3000);
  })
  .catch(err => {
    console.log(err);
  });

在客户端: 我的客户端 js 代码中的房间和消息输入的值似乎有效。

这一行允许我在加载页面上决定套接字必须连接的房间:

socket.on('connect', function() {
  socket.emit('room', room);
});

这部分似乎有效,因为我收到一条控制台消息,说帐户已连接到房间。 而这个允许客户端向房间里的人发送消息。对于这部分,我不知道为什么 app.js 上的 console.log('here :' + room + " - " + msg) 没有被触发。

socket.emit('chatMessage', messageInput);

我希望解释足够清楚...如有必要,我可以发布其他内容,但我认为这些是必不可少的部分。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    从中间件中删除套接字服务器实现,因为套接字服务器是为发送到服务器的每个请求创建的。 你应该单独实现socket-server。

    var server;
    
    mongoose.connect(MONGODB_URI).then(result => {
        server = app.listen(process.env.PORT || 3000);
        // socket server init
        socket_server(server);
    }).catch(err => {
        console.log(err);
    });
    
    function socket_server(server) {
        const io = require('socket.io')(server);
        var room;
        io.on('connect', function (socket) {
    
            socket.on('room', function (room) {
                socket.join(room);
                console.log('Connected to room :' + room)
            });
    
            socket.on('chatMessage', function (msg) {
                console.log('here :' + room + " - " + msg)
                socket.to(room).emit('chat message', msg);
            });
    
        });
    }
    

    我建议你通过socket-io docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多