websocket Написать Закрыть Сообщение всегда отправлять 1006 - PullRequest
1 голос
/ 20 марта 2019

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

1 Ответ

0 голосов
/ 22 марта 2019

Это все потому что "Спи"

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

После удаления Sleep, код работает нормально.

...