Веб-сокеты Gorilla, несколько сообщений в одном событии - PullRequest
0 голосов
/ 08 марта 2020

Я использую пример приложения чата из gorilla websockets, но у меня возникает проблема, иногда, когда бэкэнд должен отправить два разных сообщения клиенту, они отправляются только в одном событии сообщения, это плохо для меня, потому что JSON .parse не сможет проанализировать 2 jsons из одной строки. Я могу сделать разделение по новой строке и получать каждые json из сообщения, но я предпочитаю этого не делать.
Если я ставлю тайм-аут на бэкэнд, все работает.
Могу ли я что-то сделать, чтобы предотвратить это? Если нет, не могли бы вы объяснить, почему?

Это пример чата: https://github.com/gorilla/websocket/tree/master/examples/chat

Это мой код, на котором я передаю 2 сообщения:

if err == nil {
    c.SendMessageWithOrders(DB)
    data := models.EventSuccess{
        Event: utils.EventOrdersCreateSuccess,
    }
    toReturnBytes, err := json.Marshal(data)
    if err == nil {
    toReturn := BroadcastOne{
        ID:      c.ID,
        Message: toReturnBytes,
    }
    NewHub.broadcastOne <- &toReturn
    }
}

c.SendMessageWithOrders(DB) делает NewHub.broadcastOne <- &toReturn с другими данными

1 Ответ

3 голосов
/ 08 марта 2020

Следующий код в клиенте. go уменьшает объем данных, отправляемых по сети, отправляя сообщения чата в виде отдельного сообщения WebSocket:

        n := len(c.send)
        for i := 0; i < n; i++ {
            w.Write(newline)
            w.Write(<-c.send)
        }

Устранить проблему удалив код из примера. Оптимизация не требуется.

...