gpt4 book ai didi

node.js - 如何处理未知的 socket.io 事件

转载 作者:搜寻专家 更新时间:2023-10-31 23:22:03 24 4
gpt4 key购买 nike

我有以下代码服务器端。

var io = require('socket.io').listen(8080);

io.sockets.on('connection', function (socket) {
socket.on('event', function(data){
// process...
});
});

客户端(部分)

socket.emit('event', {type:'command', data:'data....'});
for (var i=0; i<=9999999; i++){
socket.emit('unknownEvent', {'type':'attack', data:'a34tagfa3wtasfd'});
}

现在,如何处理和防御'unknownEvent'事件......?..

最佳答案

较早的问题,但遇到了类似的事情,所以我想我会分享一种方法。

客户端

因此在客户端上,不要将事件作为第一个参数传递给发出,而是使用通用事件名称,例如 event 或其他名称。我最终使用了应用程序的名称,因为它很短。然后在数据对象中,传入你要调用的函数名。

所以这样:

socket.emit('awesomeSocketEvent', {hello: 'world'});

变成:

socket.emit('genericEvent', {event:'awesomeSocketEvent', hello:'world'});

在客户端重写一切都很糟糕,我的客户端内容大部分只是 emit-ing 所以我将 socket.io 客户端包装在另一个对象中,它自己的 emit 事件在事件中进行了更改名称和数据对象。

服务器端

现在在服务器端只有一个名为 genericEvent 的自定义事件,因此需要将自定义事件重组为对象的属性。一旦发生这种情况,只需简单地检查对象中是否存在该事件,如果存在则调用它,如果不存在则执行其他操作。

io.sockets.on('connection', function (socket) {

var events = {
awesomeSocketEvent: function(data){
// do your socket stuff here
}
};

socket.on('genericEvent', function(data){
if(data.event in events){
events[data.event](data);
} else {
// do your unknown event stuff here
}
});

});

在编写该部分时查看代码后,我不确定在连接事件中声明事件对象的性能。最好在连接事件之外声明 events,然后将 socket 传递给您的所有函数。

关于node.js - 如何处理未知的 socket.io 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348554/

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