Предположим, например, что есть мессенджер — у него серверная часть и клиентская. Каждое клиентское подключение осуществляется в отдельном потоке (QThread). Каждый клиент имеет уникальный идентификатор (например e-mail адрес владельца).
Как я осуществляю передачу сообщения от одного клиента к другому сейчас: каждый тред подписывается на сигнал у сервера. Когда один клиент присылает сообщение, сервер выбрасывает сигнал и все треды смотрят на идентификатор своего клиента — тот тред, у кого он совпадает с адресатом, отправляет сообщение клиенту. Все просто и отлично работает, но у меня подозрения, что это несколько неправильно. Что если клиентов миллионы? Может быть есть более разумный способ?
P.S. Каждый тред имеет также уникальный числовой идентификатор, присваиваемый автоматически при создании. Можно писать в базу соответствие этого ИД и почтового адреса. Но опять же — как послать сигнал треду с конкретным ИД?
Думаю нужно мидифицировать сигнал и сделать его с аргументом целочисленного типа. После этого, посылая сигнал нужно будет указать идентификатор нужного треда. Тред в свою очередь проверит, если значение аргумента полученного сигнала совпадает с его идентификатором — обработает его.
Чтобы тред проверял аргумент сигнала, придется эту проверку вручную делать (if(threadId == signalArg) { <действие> }). Или же есть метод qt, соединяющий тред только с определенным сигналом?