Как управлять большим количеством клиентов в программировании сокетов - PullRequest
0 голосов
/ 03 мая 2020

В примерах я видел проекты программирования сокетов (большинство из которых были проектами чата), они часто сохраняли всех клиентов в одном массиве, и когда сообщение было получено от клиента, в дополнение к сохранению его в базе данных, всем клиентам также было отправлено.

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

В этом случае не все клиенты могут управляться через массив. Так как же передать сообщение, которое теперь хранится на другом сервере (другому клиенту), клиенту на этом сервере? (Скорость важна).

Есть ли способ быстро узнать об изменениях в базе данных и предоставить их клиенту? (Например, Telegram.)

Я ищу перспективу, а не код.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Начните с чтения о проблеме C10K (http://www.kegel.com/c10k.html), а затем продолжите с проблемой C10M (http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.html)

0 голосов
/ 04 мая 2020

Вы должны использовать свою базу данных в качестве центра сообщений. Попросите другие серверы следить за изменениями в базе данных либо по подписке, либо по временному интервалу. Очевидно, подписка будет максимально быстрой.

Когда вставляется сообщение, каждый сервер забирает его и отправляет в свой список клиентов. Это должно быть достаточно быстро для трансляции сообщений.

...