Как уменьшить длинные паузы ввода-вывода WebSocket?

#go #networking #websocket #gorilla #tendermint

#Вперед #сеть #websocket #горилла #нежный

Вопрос:

У меня есть инструмент под названием Tendermint, который написан на Golang. Он обрабатывает транзакции и создает блоки (подробности намеренно опущены). Транзакции могут быть отправлены через сервер WebSocket. Блоки настроены на создание ~ каждую секунду.

Теперь, когда я открываю два или более WS-соединений и отправляю больше транзакций, чем может обработать приложение, периодически Tendermint застревает.

длительные паузы

В течение этого времени он не создает никаких блоков, но вместо этого тратит значительную часть своего времени на обработку ввода-вывода WebSocket.

Профиль процессора

Я все еще не понимаю точной природы этих пауз. Может быть, кто-то здесь знает или может задать правильные вопросы? Кроме того, мне интересно, каковы способы ограничения ввода-вывода? Дросселировать каждое соединение?

ПРИМЕЧАНИЕ: я использую https://github.com/gorilla/websocket для WebSockets. Наш WS-сервер можно найти здесь. Спасибо за ваше время!

UPD 1: Мне удалось сгладить паузы путем пакетной обработки ответов на нашем сервере WS (см.https://github.com/tendermint/tendermint/issues/3905#issuecomment-684860429)

Комментарии:

1. Вы пытались заменить эти намеренно пропущенные детали макетом / заглушкой, чтобы сузить проблему?

2. @Fulldump хорошее предложение! попробовал — проблема исчезла. проблема, похоже, возникает только при обработке транзакций.