You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:15:27