Russian Qt Forum
Ноябрь 23, 2024, 05:43
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Qt сервер.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Qt сервер. (Прочитано 11790 раз)
Konstantin
Гость
Qt сервер.
«
:
Январь 28, 2009, 17:02 »
Добрый день, с qt сталкиваюсь впервые. Хотел бы узнать следующее.
Необходимо написать сервер с достаточно большой нагрузкой. Сервер должен становиться димоном и слушать определённый порт. Графического интерфейса не надо. Данные сервер должен считывать и посылать клиентам в утф-8.
Насколько просто это реализовать на qt? не могли бы вы привести простейший полный код подобного сервера (нечто вроде "hello world" только для потенциально-высоконагружаемого сервера), который я мог бы скомпилировать..а потом сам расширить так как мне надо.
Записан
Detonator
Гость
Re: Qt сервер.
«
Ответ #1 :
Январь 28, 2009, 18:45 »
Цитата: Konstantin от Январь 28, 2009, 17:02
Необходимо написать сервер с достаточно большой нагрузкой.
Сколько подключений в секунду, долговременные или нет? Сколько запросов? Какой траффик?
А то может тебе пример "hello world" только проблемой обернется если изначально нагрузка неправильно будет оценена.
«
Последнее редактирование: Январь 28, 2009, 18:47 от Detonator
»
Записан
Konstantin
Гость
Re: Qt сервер.
«
Ответ #2 :
Январь 28, 2009, 18:57 »
Цитата: Detonator от Январь 28, 2009, 18:45
Сколько подключений в секунду, долговременные или нет? Сколько запросов? Какой траффик?
Подключений одновременно может быть около 1000 (несколько десятков тысяч пользователей в день). Каждый клиент может быть подключенным долговременно (полчаса, час, несколько часов). Обмен с сервером текстовой информацией: запросы в среднем около 1-10 кб со стороны сервера, а со стороны клиента - до килобайта. Частота запросов от одного клиента максимум раз в 3 секунды.
Записан
ритт
Гость
Re: Qt сервер.
«
Ответ #3 :
Январь 28, 2009, 19:03 »
threadedfortuneserver
Записан
Konstantin
Гость
Re: Qt сервер.
«
Ответ #4 :
Январь 28, 2009, 19:10 »
Цитата: Константин от Январь 28, 2009, 19:03
threadedfortuneserver
1000 потоков не будут тормозить сервер? этот пример на неблокирующих сокетах?
Записан
Detonator
Гость
Re: Qt сервер.
«
Ответ #5 :
Январь 28, 2009, 19:39 »
Система Windows? Или нужно кроссплатформенное?
Если только Windows то смотри Completion Port
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
Поток на каждое соединение это тупик, под Windows точно.
Записан
Konstantin
Гость
Re: Qt сервер.
«
Ответ #6 :
Январь 28, 2009, 20:23 »
Цитата: Detonator от Январь 28, 2009, 19:39
Система Windows? Или нужно кроссплатформенное?
нужно только linux
Записан
Detonator
Гость
Re: Qt сервер.
«
Ответ #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
Гость
Re: Qt сервер.
«
Ответ #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
Вот такие ошибочки выкидывает.. Может кто может мне ламеру? Буду благодарен
Записан
ритт
Гость
Re: Qt сервер.
«
Ответ #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
Записан
ритт
Гость
Re: Qt сервер.
«
Ответ #10 :
Январь 30, 2009, 12:11 »
вотъ
Записан
Konstantin
Гость
Re: Qt сервер.
«
Ответ #11 :
Январь 30, 2009, 15:49 »
сделал это. не помогает, а выводит ту ошибку, про которую я говорил.
Записан
Konstantin
Гость
Re: Qt сервер.
«
Ответ #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
Гость
Re: Qt сервер.
«
Ответ #13 :
Январь 31, 2009, 11:14 »
Наткнулся на вот такую статью
http://www.kegel.com/c10k.html
, пишут что эффективно обработать 10 000 соединений одновременно под linu x (>=2.6) можно с помощью epoll. Интересно Qt поддерживает это? Или как его прикрутить. И надо ли вообще.
Записан
Tonal
Гость
Re: Qt сервер.
«
Ответ #14 :
Февраль 12, 2009, 11:25 »
Мож не мучатся и Erlang взять?
Он как раз на подобные задачи рассчитан...
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...