如何在凤凰频道中正确使用离开/断开连接



我正在使用 Phoenix 频道将数据流式传输到具有选项卡式界面的页面。我只想在流媒体选项卡可见时接收来自频道的消息,并在用户切换到另一个选项卡时断开与频道的连接。

目前我使用类似于以下代码的内容:

window.websockets_url = "ws://localhost:4000/socket";
window.channel_id = "some-channel-id"

onWindowLoad = ->
  initSocket()
onStreamShow = ->
  connectToSocket()
onStreamHide = ->
  disconnectFromSocket()

initSocket = ->
  window.socket = new (Phoenix.Socket)(window.websockets_url)
connectToSocket = ->
  window.socket.connect()
  channel = window.socket.channel("channel:#{window.channel_id}", {})
  channel.join()
  channel.on "event", (payload) ->
    doSomethingWithThePayload(payload)
disconnectFromSocket = ->
  window.socket.disconnect()

这有效,但是在多次调用connectToSocket()disconnectFromSocket()后,我在服务器日志中收到以下消息:

流频道收到主题为"频道:某个频道 ID"的加入事件,但频道已加入

我怎样才能避免这种情况?

Javascript 中的 Phoenix Socket API 是有状态的。当您在断开连接后重新连接时,它将重新连接到之前的所有频道。然后,您将再次加入频道。

您可以重新初始化套接字 (initSocket),也可以仅在第一次连接时加入通道。

相关内容

  • 没有找到相关文章

最新更新