2

我正在尝试使用 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 操作,但我认为我对代码的理解不足以适应它。

4

1 回答 1

0

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

  • websocket 断开连接由一个特殊的数据包发出信号
  • 如果是 ex,则无法发送此数据包。网络错误
  • 没有“自动重新连接”功能,除非您可能使用为您执行此操作的库(我个人很乐意sente支持 Aleph)。

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

于 2016-01-19T08:19:10.557 回答