【发布时间】:2026-02-04 23:40:01
【问题描述】:
我的 iOS 应用和 nodeJS 后端之间设置了 socket.io 连接。
连接后,我像这样设置我的套接字:
socket.on(EVENT_NAME1, params =>
someFunc(socket, params)
);
socket.on(EVENT_NAME2, params =>
someOtherFunc(socket, params)
);
socket.on(EVENT_NAME3, (params, callback) =>
someThirdFunc(socket, params, callback)
);
...
问题是,有时我的 iOS 应用程序会触发多个事件,我想在后端确保,如果多个相同的事件从 250ms 内的一个套接字到达,则只有第一个事件会被执行。
我创建了这个函数:
const timeoutEvent = (eventName, socket, params, callback, func) => {
socket.off(eventName);
setTimeout(() => {
if (callback) {
socket.on(eventName, (params, callback) => {
func(socket, params, callback);
});
} else {
socket.on(eventName, params => {
func(socket, params);
});
}
}, 250);
};
我想这样使用:
socket.on(EVENT_NAME3, (params, callback) => {
timeOutEvent(EVENT_NAME3, socket, params, callback, someThirdFunc)
someThirdFunc(socket, params, callback);
})
问题在于这些行不起作用,因为 eventName、params 和 callback 来自 on 函数,而不是来自更高级别的 timeoutEvent 函数 -
socket.on(eventName, (params, callback) => {
func(socket, params, callback);
});
如何调整上述代码以适应此目的?
【问题讨论】:
-
据我了解,消费消息。设置一个标志,一旦你收到一条消息,你就将它设置为一个值,它应该在 250 毫秒后恢复到原始值。虽然标志值在这 250 毫秒内设置为另一个值,但消费消息但不做任何事情!
标签: javascript node.js sockets websocket socket.io