如何确保 websocket 连接在 Aleph 中保持活动状态
How to ensure websocket connection is kept alive in Aleph
我正在尝试将 Slack 的 RTM API 与 Aleph 进行交互。
目前我有这个代码:
(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 的消息。它也不打印 "closed",这似乎表示流未关闭。我不太确定这里发生了什么。
如何保持 websocket 连接,或者在断开连接时自动重新连接?我在野外看到过一些代码在执行 ping,但我认为我对代码的理解不够好,无法适应它。
我认为您必须发送 ping 消息,因为 :
- websocket 断开连接由一个特殊的数据包发出信号
- 在 ex 的情况下无法发送此数据包。网络错误
- 没有 "auto reconnect" 功能,除非您使用可以为您完成此功能的库(我个人希望
sente
支持 Aleph)。
因此你必须定期做一些"pings"。
关于代码,on-closed
想要一个函数作为第二个参数,所以:
(s/on-closed! conn #(prn "closed"))
我正在尝试将 Slack 的 RTM API 与 Aleph 进行交互。
目前我有这个代码:
(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 的消息。它也不打印 "closed",这似乎表示流未关闭。我不太确定这里发生了什么。
如何保持 websocket 连接,或者在断开连接时自动重新连接?我在野外看到过一些代码在执行 ping,但我认为我对代码的理解不够好,无法适应它。
我认为您必须发送 ping 消息,因为 :
- websocket 断开连接由一个特殊的数据包发出信号
- 在 ex 的情况下无法发送此数据包。网络错误
- 没有 "auto reconnect" 功能,除非您使用可以为您完成此功能的库(我个人希望
sente
支持 Aleph)。
因此你必须定期做一些"pings"。
关于代码,on-closed
想要一个函数作为第二个参数,所以:
(s/on-closed! conn #(prn "closed"))