代码之家  ›  专栏  ›  技术社区  ›  KasparTr

推送聊天工具-房间和房间订阅-如何检测新消息

  •  0
  • KasparTr  · 技术社区  · 6 年前

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

    我已经看过了 js documentation 但我对启动应用程序的流程感到困惑,这样我就有了新消息的主动侦听器。

    我有5个房间 currentUser

    当我这么做的时候

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

    我得到当前用户,我可以访问他的 rooms roomSubscriptions .

    文档显示我需要订阅每个用户房间,以便设置 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) 这就引出了一个问题,订阅用户已经加入的用户房间的正确流程是什么,以及如何检测新消息和新房间创建(当有人开始与您聊天时)?

    该文档实际上是简化的,不能用于实际案例。有人有这方面的经验吗?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Anurag    6 年前

    它有利有弊。 但现在我可以说,你可以设置 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
                });
    
    推荐文章