Go websocket写关闭消息始终发送1006

Go websocket写关闭消息始终发送1006,go,websocket,gorilla,Go,Websocket,Gorilla,我想向客户端发送关闭代码,但总是1006 我试过了 func ServeWs(w http.ResponseWriter, r *http.Request) { conn := Upgrade(w, r) msg := websocket.FormatCloseMessage(4001, "myError") // case 1 conn.WriteMessage(websocket.CloseMessage, msg) // case 2 //

我想向客户端发送关闭代码,但总是1006

我试过了

func ServeWs(w http.ResponseWriter, r *http.Request) {
    conn := Upgrade(w, r)
    msg := websocket.FormatCloseMessage(4001, "myError")
    // case 1
    conn.WriteMessage(websocket.CloseMessage, msg)

    // case 2
    //conn.WriteControl(websocket.CloseMessage, msg, time.Now().Add(time.Second))

    // case 3
    //w, err := conn.NextWriter(websocket.CloseMessage)
    //if err != nil {
    //  return
    //}
    //if _, err = w.Write(msg); err != nil {
    //  log.Println(err)
    //}
    //w.Close()

    time.Sleep(10*time.Second)
    conn.Close()
}

func Upgrade(w http.ResponseWriter, r *http.Request) *websocket.Conn{
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return nil
    }
    return conn
}
但并非所有这些案例都有效。除1006外,我如何向客户发送

我还测试了NodeJSWS包以验证客户端的

const WebSocket = require('ws');

const ws = new WebSocket.Server({ port: 8088 });

ws.on('connection', function connection(ws) {
  ws.close(1000, 'bac');
});
这段javascript代码运行良好

==已添加===

用于测试的客户端代码。在chrome开发工具控制台中,粘贴以下内容

conn = new WebSocket("ws://127.0.0.1:8088/connect"); conn.onclose = function(evt){console.log("do", evt);}; conn.onerror = function(err){console.log("err", err);}; conn.onmessage = function(msg){console.log("msg", msg);};
这都是因为“睡眠”

删除睡眠后,代码工作正常。

这都是因为“睡眠”


删除睡眠后,代码工作正常。

gorilla websocket代码对我来说很有效,我在客户端获得了预期的关闭代码。您调用
Upgrade(w,r)
,但(最新)gorilla中正确的签名是
Upgrade(http.ResponseWriter,*http.Request,http.Header)
,示例中输入了错别字,或者您正在使用某个旧的gorilla版本?请发布一个。特别是,显示
升级的代码
@johlo我添加了我的升级功能。是因为零头吗?我使用了这个示例中的代码gorilla websocket代码对我有效,我在客户端获得了预期的关闭代码。您调用
Upgrade(w,r)
,但(最新)gorilla中正确的签名是
Upgrade(http.ResponseWriter,*http.Request,http.Header)
,示例中输入了错别字,或者您正在使用某个旧的gorilla版本?请发布一个。特别是,显示
升级的代码
@johlo我添加了我的升级功能。是因为零头吗?我使用了这个例子中的代码
//time.Sleep(10*time.Second)
conn.Close()