我正在查看Haskell的一些WebSocket库,即Wuss,并发现可能使其无法使用的东西。
最新提交(04ab5d3f72),使用Control.Exception.Bracket
,始终关闭连接。
runSecureClientWithConfig host port path config options headers app = do
context <- Connection.initConnectionContext
Exception.bracket
(Connection.connectTo context (connectionParams host port))
Connection.connectionClose -- <-- This line closes the connection
(\connection -> do
stream <-
Stream.makeStream (reader config connection) (writer connection)
WebSockets.runClientWithStream stream host path options headers app)
如果我没有误会,那么这个函数不应该保持连接打开,因为它是一个WebSocket(或者只有在出现错误的情况下关闭它)?
对于最近提交(2017)的图书馆而言,我会因为有这样的错误而感到惊讶,我不是Haskell的专家,也不是WebSockets的专家,所以我可能只是遗漏了一些......
答案 0 :(得分:4)
这个功能的想法是它运行app
,一旦app
终止它所使用的资源就会被恢复。
通常app
将是一个长时间运行的东西,它在端口侦听连接并在到达时执行适当的操作。因此关闭端口并恢复资源是正确的事情。 previous version没有这样做,导致资源泄漏。