【问题标题】:gorilla websocket - chain of closeHandlergorilla websocket - closeHandler 链
【发布时间】:2022-01-27 12:32:06
【问题描述】:

在 gorilla websocket 中,websocket.Conn struct 有一个方法 SetCloseHandler(),用于设置连接的关闭处理程序。
如果传递的处理程序是nil,则使用默认处理程序。

我不想保留默认处理程序,而是在默认处理程序之前或之后执行其他操作。

阿卡。处理程序链,例如一些方法,例如:

  • prependCloseHandler(h)
    在处理程序链的开头添加一个处理程序。
  • appendCloseHandler(h)
    在处理程序链的末尾添加一个处理程序。

那么链中的每一个handler都会按顺序执行。

有没有办法做到这一点,将默认处理程序作为我的新处理程序的一部分?

谢谢。

【问题讨论】:

    标签: go websocket gorilla


    【解决方案1】:

    该包不提供直接机制来为close message 添加或附加处理程序。将此函数用作您的函数的启动器:

    closeHandler := conn.CloseHandler()
    conn.SetCloseHandler(func(code int, text string) error {
        // Add your code here ...
        err := closeHandler(code, text)
        // ... or here.
        return err
    })
    

    请注意,关闭处理程序是在从对等方接收到关闭消息时调用的,而不是在连接关闭时调用的。大多数应用程序都应该使用默认处理程序。

    【讨论】:

    • 赞成Note 部分,但它是应对代码,您可以通过备份当前处理程序做得更好,然后设置一个调用前一个处理程序的新处理程序,而无需应对代码。这样,您甚至可以多次执行此操作,而无需一份副本。而且,实际结果就像一个链(只是它是递归方式,不是迭代方式),要提供一种迭代方式,我想需要更改gorilla-websocket的源代码。
    猜你喜欢
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多