1

我正在开发客户端和服务器应用程序(用于通信的 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(多个/许多特定的命名事件)有什么好处。表现?个人编码风格?还有什么?

4

2 回答 2

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

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

于 2013-09-18T02:13:44.230 回答
0

socket.io-events在 npm 上结帐

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);
于 2014-07-02T17:21:45.260 回答