命名的事件 – 全部或特定?

我正在开发客户端和服务器应用程序(node.js,socket.io进行通信)。 在客户端和服务器之间发送的消息有很多不同的types,我原本以为在传输的对象中包含这个types:

// Client var data = { "type" : 5, "message" : "Hello, world!" }; socket.emit("generic_event", data); 

在服务器端,这将被这样处理:

 // Server socket.on("generic_event", function(e){ console.log("Got a generic_event!", e.type); }); 

但是,对于事件types也有更具体的可能性,例如:

 // Client socket.emit(data.type, data); // Server socket.on(1, function(){ console.log("We got '1'!"); }); // Elsewhere on in the server... socket.on(5, function(){ console.log("We got '5'!"); }); 

我很想知道schemeA(单一通用/全部捕获事件)与schemeB(多个/许多特定命名事件)的好处。 性能? 个人编码风格? 别的东西?

这主要是一个偏好问题,因为消息以任何方式发送给客户。 但是,如果您希望从客户端获得确认,则分别处理每个事件会更清晰,您也不必执行if/elseswitch来决定如何处理数据。

这是一个客户端代码的例子,当事件发生时通知服务器。

 socket.on('event', function(fn) { fn(); }); 

但是,如果您发送的对象types,您仍然只有一个callback。 然后,您必须定义客户端将在callback中发送到服务器的响应types。 所以这将是区别:

 socket.on('foo', function(data, fn) { // foo data fn(); }); socket.on('bar', function(data, fn) { // bar data fn(); }); 

和这个:

 socket.on('event', function(data, fn) { var res = {}; // data of undefined type if (data.property == 'a_condition') { res.type = 'type1'; res.data = 'foo'; } else if (data.property == 'a_condition') { res.type = 'type2'; res.data = 'bar'; } fn(res); }); 

所以总的来说,这是一个个人喜好的问题,不pipe方法如何,都会有数据从服务器发送到客户端,并且会有事件触发的客户端。 我会build议事件的具体处理程序,因为它不那么混乱,更容易维护。

在npm上签出socket.io-events

 var io = require('socket.io')(3000); var router = require('socket.io-events')(); router.on('*', function (sock, args, next) { var name = args.shift(), msg = args.shift(); sock.emit('received event', name, msg); }); io.use(router);