Używam Go (Golang) 1.4.2 z Gorilla WebSockets za odwrotnym proxy nginx 1.4.6. Moje WebSockets rozłączają się po około minucie od otwarcia strony. To samo zachowanie występuje w Chrome i Firefox.Gorilla WebSocket rozłącza się po minucie
Początkowo miałem problemy z połączeniem serwera i klienta z WebSockets. Potem przeczytałem, że muszę zmodyfikować moją konfigurację nginx. Oto, co mam.
server {
listen 80;
server_name example.com;
proxy_pass_header Server;
location/{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:1234;
}
}
Mój kod Go w zasadzie odbija się echem z powrotem do wiadomości klienta. (Błędy pominięte dla zwięzłości). To jest moja HandleFunc
.
var up = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
ws, _ := up.Upgrade(resp, req, nil)
defer ws.Close()
var s struct {
Foo string
Bar string
}
for {
ws.ReadJSON(&s)
ws.WriteJSON(s)
}
JavaScript jest również bardzo prosty.
var ws = new WebSocket("ws://example.com/ws/");
ws.addEventListener("message", function(evnt) {
console.log(JSON.parse(evnt.data));
});
var s = {
Foo: "hello",
Bar: "world"
};
ws.send(JSON.stringify(s));
Go zgłasza websocket: close 1006 unexpected EOF
. Wiem, że gdy opuszczam lub odświeżam stronę, zwracam ReadJSON
, ale wydaje się, że jest to inny błąd. Ponadto niespodziewany EOF dzieje się samo po około minucie otwarcia strony.
Mam funkcję onerror
w JavaScript. To wydarzenie nie jest wyzwalane, ale zamiast tego strzela z podpaleniem onclose
.
tej pory tak dobrze, nigdy nie wiadomo, kiedy koleś podzieli się z tobą pewną mądrością. Dzięki stary! –
@MaxYari The Dude Abides –