Meteor客户端无法实时接收消息问题求助
Meteor客户端无法实时接收消息问题求助
我是Meteor新手,现在在Bigbluebutton 2.4环境下,需要实现一个给会议中所有用户发送消息的功能。但目前就算抛开会议条件,前端也没法实时拿到消息。我已经订阅了ptzmessage,在浏览器里能看到它在Meteor.connection._subscriptions列表里,而且直接用Meteor.connection._mongo_livedata_collections.ptzmessages.find().fetch();能拿到最新消息,但Tracker就是没法实时触发更新,这到底哪里出问题了?
前端组件订阅代码
这是组件挂载时的订阅和Tracker监听逻辑:
componentDidMount() { const { onVideoItemMount, cameraId } = this.props; console.log("subscribing") Meteor.subscribe('ptzmessage').ready() this.subscription = Meteor.subscribe('ptzmessage'); // Retry after 5 seconds if not ready this.retryTimeout = setTimeout(() => { if (!this.subscription.ready()) { console.log("Retrying subscription..."); this.subscription = Meteor.subscribe('ptzmessage'); } console.log(" subscription completed..."); }, 5000); this.tracker = Tracker.autorun(() => { console.log("Fetching messages..."); const messages = PtzMessages.find({}).fetch(); this.setState({ messages }); console.log('Received Messages:', messages); }); }
集合定义文件(前后端共用)
文件路径:import/api/ptzmessage,已经在前后端都导入了:
import { Mongo } from 'meteor/mongo'; // Define PtzMessages collection export const PtzMessages = new Mongo.Collection('ptzmessages'); if (Meteor.isServer) { PtzMessages._ensureIndex({ meetingId: 1 }); }
服务器端代码(发布+消息插入)
点击发送按钮时会调用这个方法,消息确实能成功插入到集合里:
import { Meteor } from 'meteor/meteor'; import { PtzMessages } from '../index.js'; Meteor.publish('ptzmessage', function () { console.log(`Client ${this.connection.id} subscribed to ptzmessage`); return PtzMessages.find(); }); Meteor.methods({ sendPtzMessage(message) { console.log("#####################################################################################api hit") PtzMessages.insert({ text: message, createdAt: new Date() }, (err, res) => { if (err) { console.error("Insert Error:", err); } else { console.log("Message inserted successfully:", res); } }); } });
我确认点击发送按钮后,服务器端能看到插入成功的日志,集合里也有新消息,但Tracker.autorun只有组件刚挂载时执行一次,之后新消息进来完全不触发更新。项目里其他类似的Tracker用法都是正常的,实在找不到问题出在哪...
备注:内容来源于stack exchange,提问作者SilverSpade
相关产品推荐
相关产品推荐

