如果node.js应用程序的客户端都共享同一个事件队列,node.js如何跟踪哪些上下文事件所属?
下面是一个例子来说明我所说的:如果node.js应用程序的客户端都共享同一个事件队列,node.js如何跟踪哪些上下文事件所属?,node.js,Node.js,下面是一个例子来说明我所说的: var BlueBirdPromise = require('bluebird'); function getFriendsList(user_id) { //return Promise to a list of this user's friends that gets fulfilled after doing some io with a database }; function getFriendRequestsList(user_id){ /
var BlueBirdPromise = require('bluebird');
function getFriendsList(user_id) {
//return Promise to a list of this user's friends that gets fulfilled after doing some io with a database
};
function getFriendRequestsList(user_id){
//return Promise to a list of this user's friend requests that gets fulfilled after doing some io with a database
};
router.get('/homepage', function (req, res) {
BlueBirdPromise.coroutine(function* () {
var lists = yield BlueBirdPromise.props({
friends_list: getFriendsList(req.user_id),
friend_requests_lists: getFriendRequestsList(req.user_id)
});
return lists;
})()
.then(function (lists) {
res.render('homepage', {
lists: lists
});
})
.catch(function (error) {
console.log(error);
res.render('homepage', {
lists: { friends_list: [], friend_requests_list: [] }
});
});
});
假设事件按以下顺序发生:
在时间t=1时,ClientA请求索引资源,该请求被置于事件队列中
在时间t=2时,ClientB请求索引资源,该请求被置于事件队列中
在时间t=3时,事件循环运行
在时间t=4时,ClientA的好友列表的io被发送到数据库
在时间t=5时,ClientA的好友请求列表的io被发送到数据库
在时间t=6时,ClientB的好友列表的io被发送到数据库
在时间t=7时,ClientB的好友请求列表的io被发送到数据库
在时间t=8时,ClientA的好友列表的io已准备就绪,并放置在事件队列中
在时间t=9时,ClientB的朋友列表的io已准备就绪,并放置在事件队列中
在时间t=10时,ClientB的朋友请求列表的io已准备就绪,并放置在事件队列中
在时间t=11时,ClientA的朋友请求列表的io已准备就绪,并放置在事件队列中
在时间t=12时,事件队列从前到后如下所示:
ClientA FriendsList Ready事件->客户端B FriendsRequestsList Ready事件->客户端B FriendsList Ready事件->客户端A FriendsRequestsList Ready事件
在时间t=13时,事件循环运行前端事件
在时间t=14时,朋友列表与ClientA的朋友一起设置
在时间t=16时,事件循环运行下一个前端事件
在时间t=16时,friend_requests_列表与ClientB的friend requests一起设置
在这个例子中,我的问题是,在这一点上,node如何知道不返回ClientA,ClientA的好友列表
客户B的好友请求列表
即使在t=6和7时,这些请求如何不覆盖t=4和5时的请求
我想我很难理解为什么引擎盖下没有轻量级流程可以创建
分开堆叠