gpt4 book ai didi

go - websocket 写关闭消息总是发送 1006

转载 作者:IT王子 更新时间:2023-10-29 02:19:23 26 4
gpt4 key购买 nike

我想向客户端发送关闭代码,但它始终是 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
}

但并非所有这些情况都有效。如何将 except 1006 发送给客户端?

我还测试了 Node js ws 包来验证客户端的。

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);};

最佳答案

这都是因为“ sleep ”

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

删除 Sleep 后,代码工作正常。

关于go - websocket 写关闭消息总是发送 1006,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55255851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com