如何确保在Aleph中保持websocket连接

时间:2016-01-19 07:08:37

标签: clojure 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连接,或者如果断开连接则自动重新连接?我在野外看到了一些代码中的代码,但我不认为我能够很好地理解代码以适应它。

1 个答案:

答案 0 :(得分:0)

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

  • websocket deconnections由特殊数据包发出信号
  • 如果是ex,则无法发送此数据包。网络错误
  • 没有"自动重新连接"功能,除非你可能使用一个为你做这个的库(我个人喜欢sente来支持Aleph)。

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