@mitaichik
Поделитесь опытом, как решить такую задачу:
Есть сервер, там — 5 тыс потоков данных. Допустим, каждый поток — просто число, которое периодически меняется. То есть есть 5 тыс чисел, каждое из которых периодически меняется.
Есть 1 млн юзеров (клиентов, допустим, моб приложения). Каждый клиент хочет подписаться (по WebSocket или еще как) на какой-либо поток данных.
То есть на каждый поток данных приходися по 200-1000 подписчиков.
Если брать понятную аналогию, то это как сервер с котировками, которые постоянно меняются, и тысячи приложений которые получают котировки от этого сервера.
Вопрос: как сделать такой сервер? Есть ли что-то готовое? Я с таким кол-вом соединений никогда не сталкивался, и в целом то задача кажется не трудная — получил новое число, отправил в 1000 соединений, но есть сомнения что это будет быстро работать.
Где-то читал что Netty держит огромное кол-во содениений без проблем — это так?
Решения вопроса 0
Ответы на вопрос 3
@sergey-gornostaev
@sergiks
Использовать Redis в качестве PubSub брокера. Из каждого сервера подписаться на сообщения из Redis.
При подключении WebSocket клиента его подписки хранить в Memory Table того сервера, куда он подключился. Ключ $fd
подключения, в колонках держать 1/0 на каждый из 1000 каналов, или просто перечислить номера каналов через разделитель в единственном строковом поле.
При поступлении сообщения (новой цифры в одной из подписок) в цикле обходить таблицу (все подключения этого сервера) и отправлять сообщение тем, у кого включена данная подписка.
@d-stream