我正在尝试将事件从客户端订阅到服务器。我可以使用JavaScript订阅活动,但是当我使用Golang
和Gorilla Websocket library
时,我得到一个
“ websocket:关闭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对象流。
这是我的小Golang,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 (内部服务器错误)