node.js - 将套接字作为 Socket.io 参数传递?

标签 node.js socket.io node-request

总的来说,我有以下工作流程:

  1. 用户请求具有特定标题的文章
  2. 客户端,Socket.io 发出一个事件并将标题作为数据传递
  3. 服务器端, Node 向 API 发出 http 请求并收集有关该文章的相关信息
  4. 完成后,服务器会将该信息发送给客户端。

由于 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。我是否使用了糟糕的技术或错误地思考了问题,或者这是发出异步方法响应的标准方法?

注意:我本想将其放在代码审查中,但他们没有 Socket.IO 的标签,这让我认为它更适合放在这里。

最佳答案

我同意你的观点,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 的“干净代码:敏捷软件工艺手册”。他就如何构建代码以使其“干净”提供了非常有值(value)的建议。

祝你好运!

关于node.js - 将套接字作为 Socket.io 参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924119/

相关文章:

javascript + mysql 实时更改

node.js - SocketIO 识别断开连接的用户

node.js - Node : Is it possible that http server on request return the content from a request module?

node.js - 当nodejs-request获取但在浏览器或curl中工作时没有主体内容

node.js - Nodejs 中将毫秒转换为格式化日期

node.js - 合并两个 gm 对象,同时在 GraphicsMagick for NodeJS 中调整其中一个对象的大小

javascript - 套接字.io 1.0.5 : How to save session variables?

javascript - 从 Imgur API 接收到 "Uploading file too fast!"错误

git - 如何从(用户)文本内容可靠地重新计算 blob sha1 哈希(或其他身份)并逃脱行尾/空白 hell ?

javascript - 如何确定所有异步 readFile() 调用是否已完成