【问题标题】:Named events -- catch-all or specific?命名事件——包罗万象还是具体?
【发布时间】:2013-09-18 02:07:58
【问题描述】:

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

// 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);
});

但是,也有可能对事件类型进行更具体的处理,例如:

// 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'!");
});

我很想知道遵循方案 A(单个通用/包罗万象的事件)与方案 B(多个/许多特定命名事件)的好处。表现?个人编码风格?还有什么?

【问题讨论】:

    标签: node.js websocket socket.io


    【解决方案1】:

    这主要是一个偏好问题,因为消息以任何方式发送给客户端。但是,如果您想从客户端接收确认,单独处理每个事件会更简洁,您也不必执行if/elseswitch 来决定如何处理数据。

    这是一个在事件触发时通知服务器的客户端代码示例。

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

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

    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);
    });
    

    所以总而言之,这是个人喜好的问题,因为无论哪种方式,都会有数据从服务器发送到客户端,并且会有一个事件触发客户端。我会建议特定的事件处理程序,因为它不那么混乱且更易于维护。

    【讨论】:

    • 感谢您的回答!在客户端和服务器中都使用这种风格进行编码是有意义的。
    【解决方案2】:

    在 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);
    

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2011-02-12
      相关资源
      最近更新 更多