将套接字作为Socket.io Param传递?

时间:2014-07-24 02:23:04

标签: node.js socket.io node-request

从广义上讲,我有以下工作流程:

  1. 用户要求提供具有特定标题的文章
  2. 客户端,Socket.io发出一个事件并将标题作为数据传递
  3. 服务器端,节点向API发出http请求并收集有关该文章的相关信息
  4. 完成后,服务器会将该信息发送给客户端。
  5. 由于4取决于3,我的理解是它需要在回调中捕获以实现同步行为。这给了我这个:

    io.on('connection', function(socket){
      socket.on('need data', function(msg) {
        getLinkBacks(msg, socket);
      });
    });
    
    
    var getLinkBacks = function(title, socket) {
      request.get(/* relevant url */, function(err, res, body) {
        socket.emit("data", body);
      });
    };
    

    没有一个socket.io文档讨论异步方法,并且传递套接字感觉很奇怪,而不是回调函数,这将是更多的Node-y。我使用糟糕的技术或思考问题是错误的还是这是发出异步方法响应的标准方法?

    注意:我会把它放在Code Review上,但是他们没有Socket.IO的标签,这让我觉得它更适合这里。

1 个答案:

答案 0 :(得分:1)

我同意你的看法,Node的样式是传递一个回调函数,所以我会按如下方式重写这段代码:

io.on('connection', function(socket){
  socket.on('need data', function(msg) {
    getLinkBacks(msg, function(content) {
      socket.emit("data", content);
    });
  });
});


var getLinkBacks = function(title, fn) {
  request.get(/* relevant url */, function(err, res, body) {
    fn(body);
  });
};

这会使您的应用的每个部分保持隔离状态,getLinkBacks功能无需知道socket是什么。这当然是一个很好的编程实践。此外,您可以在应用的其他部分重用getLinkBacks函数,这些部分与socket对象无关。

P.S。我会推荐Robert Martin" 清洁代码:敏捷软件工艺手册"。他提供了非常有价值的建议,说明如何构建代码以使其清理"。

祝你好运!