如何确保 websocket 连接在 Aleph 中保持活动状态



>我正在尝试与 Aleph 的 Slack 的 RTM API 接口。

目前我有这个代码:

(defn connect-socket []
  (let [conn @(http/websocket-client (get-websocket-url))]
    (s/consume #(prn %) conn)
    (send-message conn {:type "ping"}) ;; just to check if send-message works
    (s/on-closed conn (prn "closed"))))

它在前几次运行良好,然后conn在一段时间不活动后停止接收来自 Slack 的消息。它也不会打印"关闭",这似乎表示流没有关闭。我不太确定这里发生了什么。

如何使 websocket 连接保持活动状态,或者在断开连接时自动重新连接?我已经看到一些代码在野外做ping,但我认为我对代码的理解不够好,无法适应它。

我认为您必须发送ping消息,因为:

  • WebSocket 断开连接由特殊数据包发出信号
  • 例如,如果
  • 出现网络错误,则无法发送此数据包
  • 没有"自动重新连接"功能,除非您可能使用为您执行此操作的库(我个人希望sente支持 Aleph)。

因此,您必须定期执行一些"ping"。关于代码,on-closed想要一个函数作为第二个参数,所以: (s/on-closed! conn #(prn "closed"))

最新更新