Я хочу отправить код закрытия клиенту, но это всегда 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 клиенту?
Я также проверил пакет 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 dev вставьте ниже
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);};