>我正在尝试与 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"))