postgresql 如何多次订阅一个支持的实时频道?

2ul0zpep  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(129)

情况

我如何设计一个功能,让用户可以访问一个页面,订阅实时更改,如果用户使用Supplementary realtime(PostgreSQL)导航离开页面,则取消订阅?
通过使用Angular Frontend,我的想法是使用一个实现通道的服务。如果用户导航到组件,用户订阅通道。如果用户导航离开并且组件被销毁,用户取消订阅。
这工作正常,但如果我再次导航到页面,它会抛出以下错误:
尝试多次订阅时出错。每个通道示例只能调用一次“subscribe”

问题

对于这种情况,最好的解决方案是什么?每次用户访问页面时,我都必须创建一个新的频道示例吗?如果是,最好的方法是什么?

我的密码

服务频道:

private notificationsChannel: RealtimeChannel = supabaseClient
    .channel('notificationsChannel')
    .on('postgres_changes', {
...
})``

字符串
订阅服务的方法:

public subscribeToRealtimeNotifications(): void {
    this.notificationsChannel.subscribe()
}


服务中取消订阅的方法:

public async unsubscribeToRealtimeNotifications(): Promise<void> {
    const response = await this.notificationsChannel.unsubscribe()
}`


组件在angular ngOnInit生命周期钩子中订阅:

async ngOnInit(): Promise<void> {
    this.notificationsService.subscribeToRealtimeNotifications()
}


组件在angular ngOnDestroy生命周期钩子中取消订阅:

async ngOnDestroy(): Promise<void> {
    await this.notificationsService.unsubscribeToRealtimeNotifications()
}


如果使用this.supabaseClient.removeChannel(this.notificationsChannel),也会发生同样的情况。

34gzjxbg

34gzjxbg1#

每次用户访问一个页面时,我都必须创建一个新的频道示例吗?如果是,最好的方法是什么?
不你知道
为什么不在订阅之前简单地创建一个新的通道示例呢?

public subscribeToRealtimeNotifications(): void {
    this.notificationsChannel = supabaseClient
      .channel('notificationsChannel')
      .on('postgres_changes', {
    ...
    })
    this.notificationsChannel.subscribe()
}

字符串

相关问题