【问题标题】:How to properly use leave/disconnect in Phoenix channels?如何在 Phoenix 频道中正确使用离开/断开连接?
【发布时间】:2016-05-19 02:10:19
【问题描述】:

我正在使用 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() 后,我在服务器日志中收到了这条消息:

StreamChannel 收到主题为“channel:some-channel-id”的加入事件,但频道已加入

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

【问题讨论】:

    标签: websocket elixir phoenix-framework


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2012-11-30
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      相关资源
      最近更新 更多