Golang WebSocket

Golang WebSocket
W tym artykule pokażemy, jak utworzyć podstawowe gniazdo internetowe w Go. Zbudujemy prosty serwer, który powtarza to, co mówisz. Pomoże to przedstawić Ci świat WebSocket i pakietu Gorilla WebSocket.

Wymagane import

Pierwszą rzeczą do zrobienia jest zaimportowanie wymaganych pakietów. Do tego projektu będziemy potrzebować pakietu FMT, NET/HTTP i pakietu Gorilla.

Możemy zrobić ten import jako:

import (
„FMT”
„net/http”
„Github.COM/Gorilla/WebSocket "
)

Po zaimportowaniu możemy zacząć budować nasz serwer.

Uaktualnij połączenie HTTP

Pierwszym krokiem w naszym projekcie jest podjęcie połączenia HTTP i uaktualnienie go do WebSocket . Możemy to zrobić za pomocą WebSocket.Ulepsz struktura. Występuje rozmiar bufora odczytu i zapisu zgodnie z definicją w kodzie źródłowym poniżej:

https: // pkg.Iść.dev/github.COM/Gorilla/WebSocket#Uaktualniacz

W naszym przykładzie użyjemy opcji domyślnych, ale ustawić Checksorigin na funkcję, która zwraca true. Zapobiegnie to blokowaniu serwera z powodu CORS.

var aktualier = WebSocket.Ulepszenie
Checkorigin: FUNC (R *HTTP.Żądanie) Bool
zwróć prawdziwie
,

Dodaj obsługę

Następnie pozwól nam obsługi HTTP, gdy klient trafia w punkt końcowy. Zdefiniujemy później w głównej funkcji.

FUNC ECHO (W HTTP.ResponseWriter, r *http.Wniosek)
Conn, err: = aktualizacja.Aktualizacja (w, r, zero)
iferr != zero
dziennik.Fatalny (err)
powrót

Defer Conn.Zamknąć()
Do
MT, wiadomość, err: = conn.Czytać wiadomość()
iferr != zero
dziennik.Fatalny (err)
przerwa

fmt.Printf („recv: %s”, wiadomość)
err = conn.WriteMessage (MT, wiadomość)
iferr != zero
dziennik.Fatalny (err)
przerwa


W powyższym przykładzie definiujemy funkcję, która przenosi respondwriter i wskaźnik do HTTP.Odpowiedź.

Uaktualniamy połączenie HTTP z protokołem WebSocket za pomocą funkcji aktualizacji. Następnie używamy pętli do słuchania i czytania przychodzących wiadomości. Następnie drukujemy wiadomość do konsoli i odzwierciedlamy wiadomość z powrotem do klienta.

Dodaj punkt końcowy WebSocket

Następnym krokiem jest dodanie prostego obsługi HTTP dla punktu końcowego WebSocket. Możemy użyć tej funkcji jako:

FUNC HOME (W HTTP.ResponseWriter, r *http.Wniosek)
WebSocketTemplate.Wykonaj (w, „WS: //”+r.Host+„/echo”)

Utwórz klienta

Aby wchodzić w interakcje z obsługą WebSocket, musimy utworzyć klienta. Możemy to zrobić, tworząc prosty plik HTML z używa JavaScript do otwarcia połączenia WebSocket z serwerem. Przykładowy kod jest taki jak pokazano:

indeks.html






Proste połączenie WebSocket



Wysłać


const wejście = dokument.getElementById („wejście”);
const wyjście = dokument.getElementById („wyjście”);
const socket = new WebSocket („WS: // LocalHost: 8000/Echo”);
gniazdo elektryczne.onOpen = function ()
wyjście.innerHtml += "Status: Connected \ n";
;
gniazdo elektryczne.onMessage = funkcja (e)
wyjście.innerHtml + = "server:" + e.dane + „\ n”;
;
FunkctSend ()
gniazdo elektryczne.Wyślij (wejście.wartość);
wejście.wartość = "";



Uruchom serwer

Ostatnim krokiem jest zdefiniowanie tras i wywołanie przewodników HTTP w głównej funkcji. Kod jest tak, jak pokazano:

funcMain ()
http.Rejwa („/echo”, echo)
http.Heverfunc („/”, dom)
http.ListenandServe („: 8000”, zero)

Zapisz pliki i uruchom:

Uruchom WS.Iść

Otwórz indeks.plik HTML w przeglądarce. Powinieneś zobaczyć podłączoną wiadomość, gdy przeglądarka ustanowi połączenie.

Jeśli wpiszesz jakąkolwiek wiadomość w polu, serwer odpowiada.

Pełny kod źródłowy programu jest taki jak pokazano:

Pakiet Main
import (
„FMT”
"dziennik"
„net/http”
„Github.COM/Gorilla/WebSocket "
)
var aktualier = WebSocket.Ulepszenie
Checkorigin: FUNC (R *HTTP.Żądanie) Bool
zwróć prawdziwie
,

funcecho (w http.ResponseWriter, r *http.Wniosek)
Conn, err: = aktualizacja.Aktualizacja (w, r, zero)
Jeśli err != zero
dziennik.Fatalny (err)
powrót

DeferConn.Zamknąć()
Do
MT, wiadomość, err: = conn.Czytać wiadomość()
Jeśli err != zero
dziennik.Fatalny (err)
przerwa

fmt.Printf („recv: %s”, wiadomość)
err = conn.WriteMessage (MT, wiadomość)
Jeśli err != zero
dziennik.Fatalny (err)
przerwa



Funchome (w http.ResponseWriter, r *http.Wniosek)
http.Servefile (w, r, „indeks.html ”)

funcMain ()
http.Rejwa („/echo”, echo)
http.Heverfunc („/”, dom)
http.ListenandServe („: 8000”, zero)

Wniosek

To był przewodnik dla początkujących o pracy z WebSocket w Go. W tym przewodniku omówiliśmy, jak uaktualnić połączenie HTTP do protokołu WebSocket, odczytać wiadomości i odpowiada wiadomości z powrotem do klienta.