Вот как я бы (и делал это много раз) так: вместо того, чтобы всегда открывать и закрывать соединения для каждого клиента, вы можете оставить одно соединение открытым на поток / волокно в зависимости от того, на чем основан ваш параллелизм, таким образом, если выиспользуют опрос Thread / Fibers, как только у каждого из них есть свои соединения, они сохранят его и снова используют.
Я до сих пор мало работал с websocket (я ждал стандартной реализации), но яя уверен, что вы можете применить это мышление и к нему.
Вы также можете делать то, что rails / activerecord: keeo пул соединения redis, каждый раз, когда вам нужно использовать соединение, которое вы запрашиваете, используйте его и повторно выпустите его, это может выглядеть так:
def handle_request(request)
@redis_pool.get_connection do |c|
# [...]
end
end
до выдачи блока соединение берется из доступных и после него соединение помечается как свободное.