我正在尝试围绕websockets创建一个包装器,最后我创建了一个函数来将core.async
write-channel
“连接”到websocket .send
函数。
(defn ch!>ws [ws write-ch]
(go-loop []
(let [msg (<! write-ch)]
(if msg
(when
(.send ws msg)
(recur))))))
除非关闭websocket,否则它可以正常工作。在这种情况下,我希望有更多的控制权。我可以决定缓冲一段时间,抛出异常,试图重新连接..
搜索后看起来似乎无法在事件发生时停止收听/开始收听频道(例如在我的情况下是websocket关闭/打开事件)。
因此可以使用core.async
(在ClojureScript中)完成此操作,或者我必须自己滚动(可能在原子中排队并观察它)?
那么如何设计我的程序以使其具有类似于传送带启动/停止的行为?