Название: Qt сервер. Отправлено: Konstantin от Январь 28, 2009, 17:02 Добрый день, с qt сталкиваюсь впервые. Хотел бы узнать следующее.
Необходимо написать сервер с достаточно большой нагрузкой. Сервер должен становиться димоном и слушать определённый порт. Графического интерфейса не надо. Данные сервер должен считывать и посылать клиентам в утф-8. Насколько просто это реализовать на qt? не могли бы вы привести простейший полный код подобного сервера (нечто вроде "hello world" только для потенциально-высоконагружаемого сервера), который я мог бы скомпилировать..а потом сам расширить так как мне надо. Название: Re: Qt сервер. Отправлено: Detonator от Январь 28, 2009, 18:45 Необходимо написать сервер с достаточно большой нагрузкой. Сколько подключений в секунду, долговременные или нет? Сколько запросов? Какой траффик? А то может тебе пример "hello world" только проблемой обернется если изначально нагрузка неправильно будет оценена. Название: Re: Qt сервер. Отправлено: Konstantin от Январь 28, 2009, 18:57 Сколько подключений в секунду, долговременные или нет? Сколько запросов? Какой траффик? Подключений одновременно может быть около 1000 (несколько десятков тысяч пользователей в день). Каждый клиент может быть подключенным долговременно (полчаса, час, несколько часов). Обмен с сервером текстовой информацией: запросы в среднем около 1-10 кб со стороны сервера, а со стороны клиента - до килобайта. Частота запросов от одного клиента максимум раз в 3 секунды.Название: Re: Qt сервер. Отправлено: ритт от Январь 28, 2009, 19:03 threadedfortuneserver
Название: Re: Qt сервер. Отправлено: Konstantin от Январь 28, 2009, 19:10 threadedfortuneserver 1000 потоков не будут тормозить сервер? этот пример на неблокирующих сокетах?Название: Re: Qt сервер. Отправлено: Detonator от Январь 28, 2009, 19:39 Система Windows? Или нужно кроссплатформенное?
Если только Windows то смотри Completion Port http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx Поток на каждое соединение это тупик, под Windows точно. Название: Re: Qt сервер. Отправлено: Konstantin от Январь 28, 2009, 20:23 Система Windows? Или нужно кроссплатформенное? нужно только linuxНазвание: Re: Qt сервер. Отправлено: Detonator от Январь 28, 2009, 21:30 Ну тогда смотри 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)." Я сам в этом направлении для линукса еще мало копал, самому предстоит в будущем писать подобное приложение. В общем мне кажется кусок обработки сообщений все же лучше сразу не на Qt писать, или по крайней мере разобраться с исходниками Qt чтобы быть уверенным что она без проблем обработает тысячи соединений без порождения отдельных потоков. Название: Re: Qt сервер. Отправлено: Konstantin от Январь 30, 2009, 11:07 Большое спасибо. Начал копать в сторону aio_read нашёл пример сервера и клиента
http://www.developerweb.net/forum/archive/index.php/t-3041.html Цитировать Minimum Requirements: OS390 V2R6 or higher. Только не компилируется почему-то... OVERVIEW Asynchronous I/O defined by UNIX 98 provides a high performance capability to design a server that contains a pool of threads, which will handle all I/O between the client and server. All threads in the pool will be contained in one process. A pool of 100 theads in this one server process can handle 10,000 or more clint server sessions or sockets. This tar file provides two sample client-server applications which use asynchronous I/O and real time queued signals as defined by UNIX 98. This sample server code also demonstrates how to create thread pools to process the asynchronous I/O. This sample code uses the following UNIX 98 APIs. - aio_read, aio_write, aio_error, aio_return, aio_cancel - sigwaitinfo The basic client server programs are as follows where xxxx is the server name such as server123.ibm.com. - aio_server - aio_client xxxxxxxx The stress sample client server code is a more comprehesive sample that can be used as a stress test. Again the xxxxxx is the server name such as server123.ibm.com - aio_server_stress - aio_client_stress xxxxxx aio_server_stress.c:31: error: stray '\325' in program Вот такие ошибочки выкидывает.. Может кто может мне ламеру? Буду благодарен Название: Re: Qt сервер. Отправлено: ритт от Январь 30, 2009, 11:52 там же ниже написано:
Цитировать Those files on the IBM site are for a 390 series system and use EBCDIC... for each file do something like: #cat INPUT_FILE | dd conv=ascii | sed -e 's/\x85/\n/g' > OUTPUT_FILE Название: Re: Qt сервер. Отправлено: ритт от Январь 30, 2009, 12:11 вотъ
Название: Re: Qt сервер. Отправлено: Konstantin от Январь 30, 2009, 15:49 сделал это. не помогает, а выводит ту ошибку, про которую я говорил.
Название: Re: Qt сервер. Отправлено: Konstantin от Январь 30, 2009, 16:45 На присланный вами архив уже ошибок меньше.. (все файлы в одну строчку) и выводит вот такие ошибки на файл aio_server_stress.c
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start': ../sysdeps/i386/elf/start.S:115: undefined reference to `main' collect2: ld returned 1 exit status Спасибо Название: Re: Qt сервер. Отправлено: Konstantin от Январь 31, 2009, 11:14 Наткнулся на вот такую статью http://www.kegel.com/c10k.html, пишут что эффективно обработать 10 000 соединений одновременно под linu x (>=2.6) можно с помощью epoll. Интересно Qt поддерживает это? Или как его прикрутить. И надо ли вообще.
Название: Re: Qt сервер. Отправлено: Tonal от Февраль 12, 2009, 11:25 Мож не мучатся и Erlang взять?
Он как раз на подобные задачи рассчитан... |