WebSockets应该关闭吗?

时间:2017-09-23 15:26:47

标签: haskell websocket

我正在查看Haskell的一些WebSocket库,即Wuss,并发现可能使其无法使用的东西。

最新提交(04ab5d3f72),使用Control.Exception.Bracket始终关闭连接。

Wuss.hs#L163

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的专家,所以我可能只是遗漏了一些......

1 个答案:

答案 0 :(得分:4)

这个功能的想法是它运行app,一旦app终止它所使用的资源就会被恢复。

通常app将是一个长时间运行的东西,它在端口侦听连接并在到达时执行适当的操作。因此关闭端口并恢复资源是正确的事情。 previous version没有这样做,导致资源泄漏。