Я пытаюсь подписаться на событие от клиента к серверу.Я могу подписаться на событие, используя JavaScript, но когда я использую Golang
и Gorilla Websocket library
, я получаю
'websocket: close 1011 (внутренняя ошибка сервера)'
каждый раз, когда я начинаю чтение из сокета.
Я также пытался использовать библиотеку /x/websocket
, но когда я пытался читать из сокета, я в конечном итоге зависал и не получал ошибку '1011'.
Если я использую этот код JavaScript в своем браузере, он работает:
<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>
Я получаю поток объектов JSON в режиме реального времени.
Это мой маленький Голанг, Скрипт Gorilla / Websockets
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
}
Возвращенная ошибка: WebSocket закрыт.websocket: закрыть 1011 (внутренняя ошибка сервера)