2016-08-28 2 views
0

Я использую Qt 5.6. Я работаю над простым чат-приложением и наткнулся на несколько мест в Интернете, говоря, что вам нужно создать новый поток, содержащий QTcpSocket для обработки всех новых подключений в новом потоке.При создании QTcpServer, который позволяет использовать несколько подключений, почему мне нужно сделать сокет в новом потоке?

Я пытаюсь понять, почему вы не можете просто использовать QList из QTcpSockets для обработки всех соединений. Может кто-нибудь объяснить мне почему?

Если я ошибаюсь, и это прекрасно, что нужно делать, пожалуйста, сообщите мне об этом.

Заранее спасибо.

+0

Вы можете ** ** есть '' QList' из QTcpSocket's обрабатывать все соединения на основной поток. На самом деле это решение является предпочтительным в Qt. Вам не нужно создавать новый поток для каждого соединения. – Mike

+0

предоставляют некоторые ссылки в онлайн-местах, на которые вы ссылаетесь. Я не понимаю, что вы подразумеваете под «* создайте новый поток, содержащий **' QTcpSocket' **, чтобы обрабатывать ** все ** соединения * ". Как у вас будет' QTcpSocket', который может обрабатывать все соединения? Вы имели в виду 'QTcpServer'? – Mike

+0

@Mike О, я хотел сказать, что я создаю новую тему для каждого 'QTcpSocket'. Самое примечательное, что я слышал это из плейлиста voidrealm на YouTube. Я сделал это очень поздно ночью, поэтому я устал. Спасибо за ваш ответ. –

ответ

1

Использование многопоточного tcp-сервера или использование одного потока tcp-сервера зависит от вашей задачи. В некоторых задачах достаточно одного потока, и вы можете «просто использовать QList из QTcpSockets». Основными характеристиками таких задач являются:

  1. Небольшое количество одновременных входящих соединений. (Критическое количество одновременных входящих соединений, когда вы должны использовать многопоточность, также зависит от вашей задачи. Но я убежден, что если у вас более 10 одновременных входящих соединений, вы должны подумать о многопоточности.)
  2. Низкая сетевая загрузка/низкая сетевых взаимодействий.

В другом случае лучше сделать ваш tcp-сервер с возможностью выполнения некоторых работ параллельно. Сколько соединений, которые вы будете иметь в одном потоке, зависит от вашей задачи, но очень большое количество потоков также является плохой идеей, потому что тогда у вас возникают проблемы с производительностью. Много времени будет потрачено на переключение контекста.

Я думаю, в вашем случае вы можете использовать самый простой вариант и «просто использовать QList из QTcpSockets»

+0

Спасибо за ваш ответ! Хотелось узнать ответ на этот вопрос некоторое время. –

Смежные вопросы