Russian Qt Forum

Qt => Работа с сетью => Тема начата: Detonator от Октябрь 19, 2008, 21:39



Название: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Detonator от Октябрь 19, 2008, 21:39
Реально ли реализовать на Qt высоконагруженный сервер с 500-1500 одновременными долговременными подключениями?
Я не особо знаком с этой частью на Linux/MacOSX, но под виндовс это возможно через connection port, использует ли подобные технологии Qt?
Варианты реализации с отдельными потоками на каждое соединений или отдельными потоками на группу из 16-32 соединений не выдерживают больше сотни-двух подключений не зависимо от можности сервера.
 


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Steven_Orko от Октябрь 24, 2008, 09:59
ИМХО, Так же, как и Виста на втором третьем пне, я думаю.

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

А что в потоки выносится? Обработка подключений? Обработка запросов клиентов?


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Detonator от Октябрь 25, 2008, 11:07
В потоках вся обработка сообщений. В общем что то типа чат-сервера, приходит сообщение от пользователя, его заголовок проверяется от кого и для какой группы и далее оно пересылается с небольшими изменениями всем другим пользователям той же группы.
На Windows у меня реализовано руками через connection-port c двумя рабочими потоками, 500-600 подключений держит стабильно. Но хотелосьбы кросплатформенного решения.


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Admin от Октябрь 25, 2008, 12:37
я бы порекомендовал для начала почитать отличия apache1 от apache2 - как они сделаны ( кроссплатнформенный он)
почитать про клиент Ultima Online, он в исходах доступен и кучу народа держит по отзывам
потом посмотреть как это к QT привязать

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



Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Karl-Philipp от Октябрь 25, 2008, 18:35
а что если использовать класс QxtAbstractConnectionManager из qxt?
http://docs.libqxt.org/latest/classQxtAbstractConnectionManager.html


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Tonal от Октябрь 26, 2008, 10:01
Судя по всему этот "connection port" - аналог классического select-а?
2 Detonator дай хоть ссылку на документацию. Чтоб можно было точно понять что это. :)


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: spirit от Октябрь 26, 2008, 10:59
to Detonator, а вы смотрели экзампл чата поставляющийся вместе ку кьюти QTDIR/examples/network/chat/? хз, может поможет.  :)


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Detonator от Октябрь 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Мб памяти, да и при большом количестве потоков только на переключение и синхронизацию меджду ними тратится ну очень много времени, программа ведет себя уже не очень предсказуемо.


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Tonal от Октябрь 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 смотрел?


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: Detonator от Октябрь 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)."
Ну и кому нужна такая реализация с тысячей потоков в фоне?


Название: Re: Высоконагруженный сервер на Qt, реально ли?
Отправлено: GRiA от Декабрь 06, 2008, 12:29
Есть еще такая штука, как QSocketNotifier... Вроде для  ИОПорта то что нужно, только вместо очереди эвентов видимо надо ждать сигнала...