2

我正在运行 echo 服务器和 redis。私人频道完美运行,我为其构建的消息传递也很有效。现在我正试图让耳语也适用于打字状态,但没有运气。耳语需要推动者才能工作吗?

我在keyup(jquery)上尝试过什么

Echo.private(chat- + userid)
.whisper('typing',{e: 'i am is typing...'});
console.log('key up'); // this one works so the keyup is triggered

那我当然是在听我在耳语的频道:

Echo.private(chat- + userid).listenForWhisper('typing', (e) => {
console.log(e + ' this is typing');
});

但我在任何地方都一无所获。(在回显服务器上调试,控制台上没有任何东西等)任何帮助如何使它工作将不胜感激。

4

2 回答 2

8

您的输入事件:

$('input').on('keydown', function(){
  let channel = Echo.private('chat')

  setTimeout( () => {
    channel.whisper('typing', {
      user: userid,
      typing: true
    })
  }, 300)
})

您的收听活动:

Echo.private('chat')
  .listenForWhisper('typing', (e) => {
    e.typing ? $('.typing').show() : $('.typing').hide()
  })

setTimeout( () => {
  $('.typing').hide()
}, 1000)

当然,您必须提前为此通道设置身份验证,以确保受信任方可以访问:

Broadcast::channel('chat', function ($user) {
    return Auth::check();
});

我们在前端的对象中传递给参数的位置$useruserid哪里。user

于 2018-07-25T17:40:59.983 回答
0

这就是我的 ReactJS componentDidMount 的样子。您的聆听活动。

componentDidMount() {
let timer; // timer variable to be cleared every time the user whispers

Echo.join('chatroom')
  .here(...)
  .joining(...)
  .leaving(...)
  .listen(...)
}).listenForWhisper('typing', (e) => {

  this.setState({
    typing: e.name
  });

  clearTimeout(timer); // <-- clear
  // Take note of the 'clearTimeout' before setting another 'setTimeout' timer.
  // This will clear previous timer that will make your typing status
  // 'blink' if not cleared.
  timer = setTimeout(() => {
    this.setState({
      typing: null
    });
  }, 500);

});
}

于 2018-11-08T08:20:54.743 回答