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

从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 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog