【发布时间】: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);
我希望解释足够清楚...如有必要,我可以发布其他内容,但我认为这些是必不可少的部分。
【问题讨论】: