1

最近我在我的 Vue 项目中实现了Pusher ChatKit 。

我已经查看了js 文档,但我对启动应用程序的流程感到困惑,因此我有新消息的活跃侦听器。

我有 5 个房间,这currentUser是其中的一部分。

当我做

chatManager
    .connect()
    .then(currentUser => {
    })

我得到了当前用户,我可以访问他的roomsroomSubscriptions.

1)有什么区别?用户所在的任何房间也应该是他订阅的房间,不是吗?

文档说我需要订阅每个用户房间才能设置onNewMessage()挂钩。

所以我这样做了:

chatManager
    .connect()
    .then(currentUser => {
      this.initiateNewChatState(currentUser)
    })

initiateNewChatState(currentUser){
    for(let room of currentUser.rooms){
      currentUser.subscribeToRoom({
         roomId: room.id,
         hooks: {
         onNewMessage: message => {
          console.log(`Received new message ${message.text}`)
          this.$store.commit('CHATKIT_message', message)
         }
       },
       messageLimit: 10
     })
  }
}

2)但是现在当我只收到一个房间的新消息时,每个房间钩子都会触发钩子(5次)。

现在,一旦我完成了订阅循环,我下次运行时就不需要这样做了,chatManager.connect()因为即使在调用currentUser.roomSubscriptions之前,我上次订阅的房间已经填满了。this.initiateNewChatState()

3)这引出了一个问题,订阅用户已经属于的用户房间的正确流程是什么,以及如何检测新消息和新房间创建(当有人开始与你聊天时)?

文档确实被简化了,并且对于现实生活中的案例是不可实现的。有人有这方面的经验吗?

谢谢!

4

1 回答 1

0

不幸的是,这是目前唯一的方法。在 Pusher ChatKit 中,每个操作都取决于当前用户和用户对房间的订阅。用户不一定订阅他/她所属的房间。它既有优点也有缺点。但现在我可以说,你可以只设置 messageLimit: 0. 当您第一次加载页面时,这不会获取所有消息。而是在用户单击房间以查看消息时使用以下方法获取消息:

           currentUser.subscribeToRoom({
                roomId: room.id,
                hooks: {
                    onNewMessage: (message) => {
                        // do something with the message
                    },
                    onUserStartedTyping : (user) => {
                        // do something with the user
                    },
                    onUserStoppedTyping : (user) => {
                        // do something with the user
                    },
                },
                messageLimit: 10
            });
于 2018-09-30T10:37:12.960 回答