Я уже пару дней борюсь с этой проблемой на QTcpSockets и QThreads.
У меня есть QTcpServer, который прослушивает порт и создает нового клиента, используя метод nextPendingConnection(). Итак, теперь у клиента есть qtcpsocket, который я могу использовать для чтения и записи.
Предположим, к моему серверу подключено 100 клиентов. Когда один из них хочет передать сообщение всем, мой основной поток (где я создаю клиентов с помощью nextPendingConnection() ) должен будет перебрать более 100 клиентов и вызвать метод записи для их сокетов. Если, например, 10 пользователей транслируют одновременно, мне придется сделать 1000 итераций, поэтому, на мой взгляд, на стороне клиента будет некоторая задержка (когда пользователь получает сообщения).
Я хотел бы делать все записи сокетов в отдельных потоках, чтобы я мог отправлять данные параллельно. Я знаю, что не могу вызвать сокет из другого потока из того, в котором он был создан, и я не хочу использовать один поток для каждого клиента, потому что я не знаю, хорошо ли иметь много потоков. (кроме того, эти потоки должны быть запущены всегда, если только клиент не отключится).
Я прочитал пример сервера фортуны, но он не решает мою проблему, потому что они уничтожают сокет после отправки данных; Я не хочу уничтожать свой сокет, потому что мне нужно прослушивать его для входящих сообщений (чтобы я мог их транслировать).
Одна вещь, о которой я подумал, это иметь 2 сокета для каждого клиента (на сервере и на стороне клиента); так что я оставляю один сокет для чтения, а другой я могу использовать, как в примере с сервером потоков удачи; в этом случае я бы также использовал пул потоков, чтобы ограничить количество задач (иначе это было бы то же самое, что использовать один поток для каждого клиента).
Не могли бы вы указать мне правильное направление или дать мне несколько советов о том, как реализовать запись параллельных сокетов без фактического наличия одного потока на клиенте...?
С уважением,
Себастьян