gpt4 book ai didi

socket.io - 如何访问未处理的消息?

转载 作者:行者123 更新时间:2023-12-01 04:30:04 25 4
gpt4 key购买 nike

你怎么能检测到你在 socket.io 连接上收到了一条你没有处理程序的消息?

例子:

// client
socket.emit('test', 'message');

// server
io.on('connection', function (socket) {
console.log('connection received...');

// logs all messages
socket.conn.on('message', function(data) {
console.log('this gets every message.');
console.log('how do I get just the ones without explicit handlers?');
});

socket.on('other' function(data) {
console.log('expected message');
});
}

最佳答案

通过访问套接字对象的内部结构,您可以确定它当前正在监听哪些事件。您可以使用此服务器端代码查看是否正在处理当前消息。

io.on('connection', (socket) => {
console.log('A user connected.');
socket.on('disconnect', () => {
console.log('A user disconnected.');
});
socket.on('chat', (msg) => {
console.log('message: ' + msg);
io.emit('chat', msg);
});
socket.conn.on('message', (msg) => {
if(!Object.keys(socket._events).includes(msg.split('"')[1])) {
console.log(`WARNING: Unhandled Event: ${msg}`);
}
});
}

连接后,我正在处理两个事件,“断开连接”和“聊天”。之后,我定义了一个处理程序,它使用 socket.conn.on(...) 捕获所有消息。

它接收到的消息将是一个看起来像这样的字符串: '2["myEventName","param1","param2"]' .通过沿双引号将其拆分,我们可以获得事件名称。

然后我们查看 socket 的内部以找到 socket._events 的所有键,这些键恰好是事件名称字符串。如果这个字符串集合包含我们的事件名称,那么另一个处理程序将处理它,而我们不必这样做。

您可以从浏览器中的控制台对其进行测试。运行 socket.emit('some other event')在那里,您应该会在服务器控制台中看到您的警告。

重要说明:通常您不应尝试从外部修改任何以下划线开头的对象成员。此外,预计其中的任何数据都是不稳定的。下划线表示它供该对象、类或函数内部使用。虽然这个对象不稳定,但它应该是最新的,我们可以使用它,我们不会直接修改它。

在 Chrome 上使用 SocketIO 2.2.0 版进行测试。

关于socket.io - 如何访问未处理的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com