duanla4959 2019-06-05 22:09
浏览 1483

从websocket收到消息时,不会导致“ Websocket:关闭1011”

I'm trying to subscribe to an event from a client to a server. I can subscribe to the event using JavaScript but when I use Golang and the Gorilla Websocket library I get a

'websocket: close 1011 (internal server error)'

every time I start a read from the socket.

I tried using the /x/websocket library as well but when I tried to read from the socket I end up hanging and I dont get the '1011' error.

If I use this JavaScript code on my browser it works:

<html>
  <head>
  </head>
  <body>
    <script>
        var socket = new WebSocket("ws://blehip:blehpport");

        function send(data) {
            socket.send(JSON.stringify(data));
        }

        socket.onopen = function() {
            send({
                action: 'subscribe',
                auth_token: 'Bleh',
                request_id: 'Bleh',
                data: {
                    account_id: 'bleh',
                    binding: "bleh"
                }
            });
        }

        socket.onmessage = function(raw_message) {
            var json_data = JSON.parse(raw_message.data);

            console.log(json_data);
        };

    </script>
  </body>
</html>

I get a stream of JSON objects in real time.

This is my small Golang, Gorilla/Websockets script

func main() {
    var server = flag.String("server", "blehIP:BlehPort", "server address")

    var wg sync.WaitGroup
    flag.Parse()

    url := url.URL {
        Scheme: "ws",
        Host: *server,
        Path: "",
    }

    conn, _, err := websocket.DefaultDialer.Dial(url.String(), nil)
    if err != nil {
        log.Fatal("Dial Error: ", err)
    }
    defer conn.Close()

    payload := []byte(`{"action":"subscribe",`+
                       `"auth_token":"` + bleh + `",`+
                       `"request_id":"` + bleh + `",`+
                       `"data": {`+
                                `"account_id":"` + bleh + `",`+
                                `"binding":"` + bleh + `"}`+
                      `}`)

    wg.Add(1)
    go func() {
        defer conn.Close()
        defer wg.Done()

        err = conn.WriteMessage(websocket.TextMessage, payload)
        if err != nil {
            log.Println("Write Error: ", err)
            return
        }

        m := frame{}
        err := conn.ReadJSON(&m)
        if err != nil {
            log.Println("WebScoket closed.", err)
            return
        }


        // msg := string(bytes[:])
        fmt.Printf("%v", m)
    }()
    wg.Wait()

    return
}

The error returned is: WebSocket closed. websocket: close 1011 (internal server error)

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求学软件的前人们指明方向🥺
    • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
    • ¥15 MCNP里如何定义多个源?
    • ¥20 双层网络上信息-疾病传播
    • ¥50 paddlepaddle pinn
    • ¥20 idea运行测试代码报错问题
    • ¥15 网络监控:网络故障告警通知
    • ¥15 django项目运行报编码错误
    • ¥15 STM32驱动继电器
    • ¥15 Windows server update services