最近,我在我的Vue项目中实现了Pusher ChatKit。
我已经检查了js documentation,但我对启动应用程序的流程感到困惑,这样我就有了新消息的活跃监听器。
我有5个房间是currentUser的一部分。
当我这样做的时候
chatManager
.connect()
.then(currentUser => {
})我得到了当前用户,我可以访问他的rooms和roomSubscriptions。
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)这就引出了一个问题,订阅用户已经加入的用户房间的正确流程是什么,以及如何检测新消息和新房间的创建(当有人开始与您聊天时)?
文档确实被简化了,并且无法在实际案例中实现。有人有这方面的经验吗?
谢谢!
发布于 2018-09-30 18:37:13
不幸的是,这是目前唯一的方法。在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
});https://stackoverflow.com/questions/50733477
复制相似问题