【问题标题】:Laravel echo listen for whisper function not workingLaravel echo 监听耳语功能不起作用
【发布时间】:2018-11-15 02:15:10
【问题描述】:

我正在构建一个实时聊天应用程序,但我发现listenforwhisper 功能不工作,但.whisper() 功能工作正常,推送器也收到客户端输入事件。

这是我的代码:

听耳语:

Echo.private(`messages.${this.user.id}`)
    .listen("NewMessage", (e) => {
      this.handleIncoming(e.message);
    })
    .listenForWhisper("typing", (e) => {
      if(e.name !='') {
        this.typeStatus = 'typing .........'
      }
      else {
        this.typeStatus = ''
      }
      console.log(this.typeStatus);
    });

对于耳语:

watch: {
    message() {
      Echo.private(`messages.${this.user.id}`)
      .whisper("typing", {
        name: this.message
      });
    }
  }

频道:

Broadcast::channel('messages.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

理论上,我的控制台会返回 typeStatus,但我的控制台中什么也没有。

【问题讨论】:

    标签: vue.js pusher laravel-echo


    【解决方案1】:

    Whisper 的工作方式类似于 broadcastToOthers。您现在正试图倾听当前用户的耳语。您应该有一个房间可以让耳语进入,并且应该有多个客户可以接收。现在您的频道与用户绑定在一起,其他人无法看到通过该频道的消息。

    【讨论】:

    • 所以你的意思是我必须有一个 id 正在使用房间 id 的频道,并且这个房间 id 将接受发送者和接收者并返回 true??
    • 没错,您可以将房间 ID 保存在数据库中,并将它们添加为双方用户的多对多关系。
    • broadcastToOthers 似乎不是真的。我用过它,在两个标签中打开同一个页面会听当前用户的耳语。我认为开发人员应该在展示时处理耳语。
    【解决方案2】:

    好的,我介入了同样的问题。我有 2 个频道和 2 个用户。我用wisper设置了一个间隔

    setInterval(() => {
                channel.whisper('typing', {
                    message: 'hola!'
                });
            }, 3000);
    
    channel.listenForWhisper('typing', (e) => {
                    console.log('Typing');
                    console.log(e);
                })
    

    问题是我正在接收事件,但在我将第二个用户连接到频道之前,我无法看到 listenForWhisper 的输出。

    连接第二个用户后,它就可以正常工作了。所以如果你有同样的问题,我就离开了她。

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2019-01-02
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2020-08-30
      • 2017-08-21
      • 2018-07-29
      • 2022-06-21
      相关资源
      最近更新 更多