Russian Qt Forum
Ноябрь 23, 2024, 05:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Высоконагруженный сервер на Qt, реально ли?  (Прочитано 12405 раз)
Detonator
Гость
« : Октябрь 19, 2008, 21:39 »

Реально ли реализовать на Qt высоконагруженный сервер с 500-1500 одновременными долговременными подключениями?
Я не особо знаком с этой частью на Linux/MacOSX, но под виндовс это возможно через connection port, использует ли подобные технологии Qt?
Варианты реализации с отдельными потоками на каждое соединений или отдельными потоками на группу из 16-32 соединений не выдерживают больше сотни-двух подключений не зависимо от можности сервера.
 
Записан
Steven_Orko
Гость
« Ответ #1 : Октябрь 24, 2008, 09:59 »

ИМХО, Так же, как и Виста на втором третьем пне, я думаю.

Варианты реализации с отдельными потоками на каждое соединений или отдельными потоками на группу из 16-32 соединений не выдерживают больше сотни-двух подключений не зависимо от можности сервера.

А что в потоки выносится? Обработка подключений? Обработка запросов клиентов?
Записан
Detonator
Гость
« Ответ #2 : Октябрь 25, 2008, 11:07 »

В потоках вся обработка сообщений. В общем что то типа чат-сервера, приходит сообщение от пользователя, его заголовок проверяется от кого и для какой группы и далее оно пересылается с небольшими изменениями всем другим пользователям той же группы.
На Windows у меня реализовано руками через connection-port c двумя рабочими потоками, 500-600 подключений держит стабильно. Но хотелосьбы кросплатформенного решения.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Октябрь 25, 2008, 12:37 »

я бы порекомендовал для начала почитать отличия apache1 от apache2 - как они сделаны ( кроссплатнформенный он)
почитать про клиент Ultima Online, он в исходах доступен и кучу народа держит по отзывам
потом посмотреть как это к QT привязать

PS: я не большой тут спец, может че не так написал

Записан
Karl-Philipp
Гость
« Ответ #4 : Октябрь 25, 2008, 18:35 »

а что если использовать класс QxtAbstractConnectionManager из qxt?
http://docs.libqxt.org/latest/classQxtAbstractConnectionManager.html
Записан
Tonal
Гость
« Ответ #5 : Октябрь 26, 2008, 10:01 »

Судя по всему этот "connection port" - аналог классического select-а?
2 Detonator дай хоть ссылку на документацию. Чтоб можно было точно понять что это. Улыбающийся
Записан
spirit
Гость
« Ответ #6 : Октябрь 26, 2008, 10:59 »

to Detonator, а вы смотрели экзампл чата поставляющийся вместе ку кьюти QTDIR/examples/network/chat/? хз, может поможет.  Улыбающийся
Записан
Detonator
Гость
« Ответ #7 : Октябрь 26, 2008, 11:10 »

Судя по всему этот "connection port" - аналог классического select-а?
2 Detonator дай хоть ссылку на документацию. Чтоб можно было точно понять что это. Улыбающийся

Извиняюсь, ошибся в названии, на самом деле называется "I/O completion ports"
http://www.gamedev.ru/community/mmorpg/articles/?id=6

Но есть ли аналог под Linux/MacOSX я до сих пор не нашел.

Простой select не масштабируем, т.к. очень медленный когда работаешь с сотнями сокетов. Я с этим еще давно столкнулся.
Вот тут к примеру хорошо описана эта проблема, но статья старая, я не знаю найдено сейчас кросплатформенное решение или нет.
http://www.atnf.csiro.au/people/rgooch/linux/docs/io-events.html

Делить сокеты на группы по 16-32 штук в каждой и каждую в группу обрабатывать в своем потоке - такой способ реализации я предполагаю на крайний случай если не найдется найти ничего лучшего, взаимодействие между самими такими потоками сильно усложнит программу, к тому же незнаю как в линуксе, а под виндовс каждый новый поток отнимает около 1Мб памяти, да и при большом количестве потоков только на переключение и синхронизацию меджду ними тратится ну очень много времени, программа ведет себя уже не очень предсказуемо.
Записан
Tonal
Гость
« Ответ #8 : Октябрь 26, 2008, 11:30 »

http://w0.sao.ru/hq/vch/Publications/Russ/html/linux-posix/node7.html
http://lrn.ru/index.php?module=library&action=show&docid=76&part=878
Ну и вообще google асинхронный+ввод+вывод+linux смотрел?
Записан
Detonator
Гость
« Ответ #9 : Октябрь 26, 2008, 11:42 »

http://w0.sao.ru/hq/vch/Publications/Russ/html/linux-posix/node7.html
http://lrn.ru/index.php?module=library&action=show&docid=76&part=878
Ну и вообще google асинхронный+ввод+вывод+linux смотрел?

Смотрел. А еще о aio_read() читал такое: "This model looks appealing, until we look under the hood of some aio_*() implementations. The Linux glibc implementation is a case in point: there is no kernel support. Instead, the C library (glibc 2.1) launches a thread per FD for which there are outstanding AIO requests (up to the maximum number of configured threads)."
Ну и кому нужна такая реализация с тысячей потоков в фоне?
Записан
GRiA
Гость
« Ответ #10 : Декабрь 06, 2008, 12:29 »

Есть еще такая штука, как QSocketNotifier... Вроде для  ИОПорта то что нужно, только вместо очереди эвентов видимо надо ждать сигнала...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.159 секунд. Запросов: 23.