关于socket.io中emit的回调
我在学习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后会
- 生成一个本地自增id
this.ids++
,并带给服务端,同时将回调函数存下来this.acks
- 服务端收到消息后,如果有回调会发送消息给客户端并带上客户端发送的自增id
- 客户端接受到消息如果发现服务端回传的自增id在本地有记录
onack
,执行回调函数,并删除本地的回调函数
大概看了一下,整个过程差不多是这样
感谢,我大致翻过node块的源码,水准不太够看通。。 只知道他在维护个什么。。