Здравствуйте, помогите пожалуйста разобраться с gorilla/websocket.
Не понимаю как мне правильно с ним работать.
Вот что есть:
Создаём hub:
type Hub struct {
clients map[*Client]bool
broadcast chan []byte
register chan *Client
unregister chan *Client
}
func NewHub() *Hub {
return &Hub{
broadcast: make(chan []byte),
register: make(chan *Client),
unregister: make(chan *Client),
clients: make(map[*Client]bool),
}
}
func Run(h *Hub) {
for {
select {
case client := <-h.register:
h.clients[client] = true
case client := <-h.unregister:
if _, ok := h.clients[client]; ok {
delete(h.clients, client)
close(client.send)
}
}
}
}
В main.go:
hub := ws.NewHub()
go ws.Run(hub)
....
r.HandleFunc("/socket", func(w http.ResponseWriter, r *http.Request) {
ws.ServeWs(hub, w, r)
})
Client:
const (
writeWait = 10 * time.Second
pongWait = 60 * time.Second
pingPeriod = (pongWait * 9) / 10
maxMessageSize = 512
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
type Client struct {
hub *Hub
conn *websocket.Conn
send chan []byte
}
func ServeWs(hub *Hub, w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
client := &Client{hub: hub, conn: conn, send: make(chan []byte, 256)}
client.hub.register <- client
}
Тут тоже все понятно, но что дальше?
Я так понимаю нужно играть в "ping/pong", но совсем не понимаю как мне это осуществить?
Так-же не понимаю как мне правильно отслеживать сообщения от клиента на стороне сервера и отвечать ему?
Подскажите пожалуйста:3