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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt сервер.  (Прочитано 11796 раз)
Konstantin
Гость
« : Январь 28, 2009, 17:02 »

Добрый день, с qt сталкиваюсь впервые. Хотел бы узнать следующее.
Необходимо написать сервер с достаточно большой нагрузкой. Сервер должен становиться димоном и слушать определённый порт. Графического интерфейса не надо. Данные сервер должен считывать и посылать клиентам в утф-8.
Насколько просто это реализовать на qt? не могли бы вы привести простейший полный код подобного сервера (нечто вроде "hello world" только для потенциально-высоконагружаемого сервера), который я мог бы скомпилировать..а потом сам расширить так как мне надо.
Записан
Detonator
Гость
« Ответ #1 : Январь 28, 2009, 18:45 »

Необходимо написать сервер с достаточно большой нагрузкой.

Сколько подключений в секунду, долговременные или нет? Сколько запросов? Какой траффик?
А то может тебе пример "hello world" только проблемой обернется если изначально нагрузка неправильно будет оценена.
« Последнее редактирование: Январь 28, 2009, 18:47 от Detonator » Записан
Konstantin
Гость
« Ответ #2 : Январь 28, 2009, 18:57 »

Сколько подключений в секунду, долговременные или нет? Сколько запросов? Какой траффик?
Подключений одновременно может быть около 1000 (несколько десятков тысяч пользователей в день). Каждый клиент может быть подключенным долговременно (полчаса, час, несколько часов). Обмен с сервером текстовой информацией: запросы в среднем около 1-10 кб со стороны сервера, а со стороны клиента - до килобайта. Частота запросов от одного клиента максимум раз в 3 секунды.
Записан
ритт
Гость
« Ответ #3 : Январь 28, 2009, 19:03 »

threadedfortuneserver
Записан
Konstantin
Гость
« Ответ #4 : Январь 28, 2009, 19:10 »

threadedfortuneserver
1000 потоков не будут тормозить сервер? этот пример на неблокирующих сокетах?
Записан
Detonator
Гость
« Ответ #5 : Январь 28, 2009, 19:39 »

Система Windows? Или нужно кроссплатформенное?

Если только Windows то смотри Completion Port
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
Поток на каждое соединение это тупик, под Windows точно.
Записан
Konstantin
Гость
« Ответ #6 : Январь 28, 2009, 20:23 »

Система Windows? Или нужно кроссплатформенное?
нужно только linux
Записан
Detonator
Гость
« Ответ #7 : Январь 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 чтобы быть уверенным что она без проблем обработает тысячи соединений без порождения отдельных потоков.
« Последнее редактирование: Январь 28, 2009, 21:35 от Detonator » Записан
Konstantin
Гость
« Ответ #8 : Январь 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
Вот такие ошибочки выкидывает.. Может кто может мне ламеру? Буду благодарен
Записан
ритт
Гость
« Ответ #9 : Январь 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
Записан
ритт
Гость
« Ответ #10 : Январь 30, 2009, 12:11 »

вотъ
Записан
Konstantin
Гость
« Ответ #11 : Январь 30, 2009, 15:49 »

сделал это. не помогает, а выводит ту ошибку, про которую я говорил.
Записан
Konstantin
Гость
« Ответ #12 : Январь 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

Спасибо
Записан
Konstantin
Гость
« Ответ #13 : Январь 31, 2009, 11:14 »

Наткнулся на вот такую статью http://www.kegel.com/c10k.html, пишут что эффективно обработать 10 000 соединений одновременно под linu x (>=2.6) можно с помощью epoll. Интересно Qt поддерживает это? Или как его прикрутить. И надо ли вообще.
Записан
Tonal
Гость
« Ответ #14 : Февраль 12, 2009, 11:25 »

Мож не мучатся и Erlang взять?
Он как раз на подобные задачи рассчитан...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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