大佬教程收集整理的这篇文章主要介绍了node.js – 使用GraphQL Apollo跟踪在线用户,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的调查:我非常确定我不需要实现任何心跳逻辑,因为订阅正在处理WebSockets.但是我没有在他们的文档中找到任何关于如何处理WebSockets事件的信息,例如“连接”和“断开连接”…实际上我可以从实际订阅的外部处理这些事件:
SubscriptionServer.create({ execute,subscribe,scheR_984_11845@a,onConnect = (...args) => { console.log('User connected') },onDisconnect = (...args) => { console.log('User disconnected') } },{ server: ws,path: '/subscriptions' })
我的实现:现在我让它像那样工作:
>我们为所有调用表达了中间件,它将用户对象从jsonwebtoken推送到req对象.在这里,我可以触发“用户现在在线”的逻辑.
>我创建了单独的订阅,客户端在登录时订阅它并在注销时取消订阅.由于没有取消订阅处理程序,我设法确定在没有有效负载的情况下在用户断开连接时调用过滤器函数,所以我采用了这种方法:
userOnlinesubscription: { subscribe: withFilter( () => pubSub.asyncIterator('userOnlinesubscription'),async (payload,variables) => { if (!payload) { // set user offline } return false } ) }
onConnect (connectionParams,webSocket) { const userPromise = new Promise((resolve,reject) => { if (connectionParams.jwt) { jsonwebtoken.verify( connectionParams.jwt,JWT_SECRET,(err,decoded) => { if (err) { reject(new Error('Invalid Token')) } resolve( User.findOne({ where: { id: decoded.id } }) ) } ) } else { reject(new Error('No Token')) } }) return userPromise.then(user => { if (user) { return { user: Promise.resolve(user) } } return Promise.reject(new Error('No User')) }) }
以上是大佬教程为你收集整理的node.js – 使用GraphQL Apollo跟踪在线用户全部内容,希望文章能够帮你解决node.js – 使用GraphQL Apollo跟踪在线用户所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。