Цитата(ViGOur)
В том потоке в котором был создан объект получатель
я провёл эксперимент:
прямо в секции run() потока подключаю сигнал readyRead() с сокета, на слот onReadyRead(), который в том же потоке.
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
в onReadyRead() дописываю замкнутый цикл forever;
запускаю Winternals Process Explorer и смотрю какой из потоков нагружен. как ни странно загружен главный поток..
пока писал этот пост пришла на ум попробывать вот так:
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()),Qt::DirectConnection);
с Qt::DirectConnection слот onReadyRead() отрабатывает в дочернем потоке =)
и главное, при подвисшем потоке сервер продолжает принимать соединения и отвечать другим пользователям =)
Цитата(ViGOur)
Тогда тебе нужно отказаться от схемы "1 соединени - 1 поток", а подумать о реализации схему "много соединений - 1 поток".
вот наоборот не вижу смысла отказываться. т.к. при ддос атаке большинство коннектов будут отвергаться потоком принимающим соединения, из за авторизации. а те пользователи которые уже авторизированы будут рабатать без проблемм. мало того, если авторизированый пользователь захочет навредить системе, он сможет подвесить только себя. отвалится по tcp-таймауту =)) т.к. его соединение обрабатывает тот же поток что и все остальные функции обработки действий пользователя =)
таким образом хочу максимально изолировать пользователей друг от друга. планируется около 1-2 тыс авторизированых пользователей. мм.. можно ли создать такое колличество потоков?
хранить указатель на соединение это конечно удобно.. а как лучше сделать если всётаки 1 поток = 1 соединение?)
сам себе отвечу =)
http://rsdn.ru/archive/vc/issues/pvc064.htmТаким образом максимальное количество потоков, которые можно создать при всех параметрах заданных по умолчанию, равняется примерно 2035
Все сказанное ниже справедливо для линейки Windows NT/2000/XP
для линукса наверное будет другое колличество, но думаю мне хватит =)