Socket.io-防止触发多个事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket.io-防止触发多个事件相关的知识,希望对你有一定的参考价值。
我在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);
);
如何调整以上代码以适合此目的?
答案
在connect
函数中,我添加了:
socket.enabled = true
socket.on(EVENT_NAME, (params, callback) =>
socket.enabled && someFunc(socket, params, callback);
preventMutlipleHandlers(socket);
);
然后我创建了这个函数:
const preventMutlipleHandlers = socket =>
socket.enabled = false;
setTimeout(() =>
socket.enabled = true;
, 250);
;
以上是关于Socket.io-防止触发多个事件的主要内容,如果未能解决你的问题,请参考以下文章
socket.io - 'connect' 事件不会在客户端触发