关于socket.io中emit的回调
发布于 8 年前 作者 mosaice 4718 次浏览 来自 问答

我在学习socket.io的时候对着书上的例子照着码,遇到了一段不是很理解 node

  socket.on('search', function (q, fn) {
    superagent.get(api + q)
    .end(function (err, res) {
      if (err) console.log(err);
      console.log(fn());//undefined
      fn(JSON.parse(res.text));
    });
  });

浏览器

  socket.emit('search', song, function (songs) {
	console.log(songs);//在浏览器执行
	return 1;
  });

这段代码看起来像是前端在emit 的时候传了一个回调给node那边,然后superagent 抓完数据后执行了回调, 但是结果是最终emit给的回调是在浏览器执行的

不是很明白为什么在node中调用会在浏览器执行?

2 回复

客户端emit后会

  1. 生成一个本地自增idthis.ids++,并带给服务端,同时将回调函数存下来 this.acks
  2. 服务端收到消息后,如果有回调会发送消息给客户端并带上客户端发送的自增id
  3. 客户端接受到消息如果发现服务端回传的自增id在本地有记录onack,执行回调函数,并删除本地的回调函数

大概看了一下,整个过程差不多是这样

感谢,我大致翻过node块的源码,水准不太够看通。。 只知道他在维护个什么。。

回到顶部