@VladimirDronik

Как отправить сообщение только конкретному пользователю в gorilla websocket?

Есть приложение сделанное по экзамплу:
https://gowebexamples.com/websockets/

html отправляет данные в вебсокет и получает ответ. Но как при подключении можно задать имя или id клиента, что бы отправлять потом ему сообщения с сервера?

На PHP это делал примерно так:
HTML клиент шлет запрос на подключение:
ws = new WebSocket("ws://199.120.133.176:48/?user=tester");

Сервер при этом заносит tester в массив users и потом мы можем оперировать этим массивом. Например можем отправить данные конкретному юзеру или всем сразу или выборочно, короче как угодно.

Как подобное реализовать на GO ?
  • Вопрос задан
  • 570 просмотров
Решения вопроса 1
@VladimirDronik Автор вопроса
Разобрался. Кратенько должно быть вот так:

func main() {
 //создаем карту с пользователями
 users := make(map[string]*websocket.Conn)

	http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) {

	conn, _ := upgrader.Upgrade(w, r, nil) 

       //получаем id подключенного пользователя, который приходит в get параметре
       userId := r.URL.Query()["user"][0]

       // В консоли показываем какой пользователь подключился   
       fmt.Printf("User %s is connected \n", string(userId))
      //заносим в карту текущее подключение с ключем = id пользователя
        users[userId] = conn


Вот так можно передать в сокет сообщение для конкретного пользователя
users[userId].WriteJSON(string(msg))

А вот так для всех разом

for _, user := range users {
   user.WriteJSON(string(msg))
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы