@Riedel87
Oracle/Python/IOS Developer

Как не отправлять сообщение отправителю websocket в языке GO?

Всем привет!
Вот тут я взял пример для создания веб-сокета (ссылка ниже на гитхаб) и отправки сообщения всем устройствам, которые подключены к серверу.
Сервер все хорошо отправляет, но он отправляет сообщение даже тому, кто послал это сообщение, а вот этого не нужно.
Не могу понять, как выцепить отправителя и не слать ему сообщение его же.
Можете помочь? Гугл весь обшарил уже :(
Там есть функция sendall, она отвечает за отправку, видимо в ней как-то нужно подправить...
https://github.com/jakecoffman/go-angular-tutorial...
  • Вопрос задан
  • 301 просмотр
Решения вопроса 1
Полагаю, вам нужно это

func sendAll(msg []byte, myconn *websocket.Conn) {
    for conn := range connections {
        if myconn != conn {
            if err := conn.WriteMessage(websocket.TextMessage, msg); err != nil {
                delete(connections, conn)
                conn.Close()
            }
        }
    }
}


P.S. А еще вы изменяете map из нескольких потоков одновременно, это очень плохо. Однажды ваше приложение рухнет из-за ошибки памяти. Если хотите изменять глобальные объекты из нескольких горутин (а net/http каждое соединение обрабатывает в отдельной горутине), то вам нужно обеспечить чтобы с map-ом в каждый момент времени работала только одна горутина. Это делается через мьютексы, например.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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