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

时间:2019-03-20 07:51:58

标签: go websocket gorilla

我想向客户发送关闭代码,但始终为1006。

我尝试过

@ExceptionHandler({ CustomException.class })
@ResponseStatus(HttpStatus.CONFLICT)
public List<ErrorOutDTO> handle(CustomException theException) {
    return new null;
} 

但不适用于所有这些情况。如何向客户发送1006以外的邮件?

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

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
}

此javascript代码工作正常。

===已添加===

用于测试的客户代码。在chrome dev工具控制台中,粘贴以下

const WebSocket = require('ws');

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

ws.on('connection', function connection(ws) {
  ws.close(1000, 'bac');
});

1 个答案:

答案 0 :(得分:0)

这都是因为“睡眠”

String dt = dateString.substring(0, dateString.indexOf("T"))

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