Russian Qt Forum
Ноябрь 24, 2024, 07:49
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Быстродействие сервера
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Быстродействие сервера (Прочитано 4548 раз)
sidsukana
Гость
Быстродействие сервера
«
:
Август 03, 2012, 08:13 »
Есть сервер (допустим некой игры). Соответственно есть опкоды, которым он обменивается с клиентами и их хендлеры. Этих опкодов может быть очень много (ну на разные игровые события) соответственно много хендлеров. Так вот есть такой вопрос - как правильно реализовать обработку хендлеров? Правильно ли будет при приеме очередного пакета с клиента, использовать сигнал-слот для передачи данных в хендлер? Или же по старинке использовать указатель на функцию хендлера? Вообще использование сигналов-слотов в реализации клиент-серверного пинг-понга это будет нормально, или же постепенно глобальный eventloop Qt будет переполняться и все пойдет под откос?))
И опять же, мы говорим про серверную сторону - клиентов может быть и 10 и 100 и 1000. Естественно будет необходима многопоточная реализация.
«
Последнее редактирование: Август 03, 2012, 08:15 от sidsukana
»
Записан
Bepec
Гость
Re: Быстродействие сервера
«
Ответ #1 :
Август 03, 2012, 08:16 »
Если нагрузка на сервер минимальна (100-300 соединений) то сигналы спокойно справятся.
Если нагрузка больше, то желательно обойтись без сигнал-слотов на каждый чих.
У нас есть один интересный человек, alexis(тут много цифр). Он реализовал вроде сервер на С++. Можете спросить совета у него.
Записан
alexis031182
Гость
Re: Быстродействие сервера
«
Ответ #2 :
Август 03, 2012, 10:29 »
Верес прав. Если нужен максимально быстрый отклик, то лучше без сигнал-слотов обойтись. Также, лучше не использовать QTcpServer. Он удобен и прост, но относительно медленный при большом количестве соединений. Для виндовса рекомендовать ничего не могу (попросту не работаю с этой ОС), а для Linux используйте epoll.
Записан
sidsukana
Гость
Re: Быстродействие сервера
«
Ответ #3 :
Август 03, 2012, 10:36 »
QTcpServer он же просто принимает соединения, или я не прав? Вся работа же лежит на QTcpSocket(AbstractSocket)?
Записан
Bepec
Гость
Re: Быстродействие сервера
«
Ответ #4 :
Август 03, 2012, 10:41 »
Там по идее всё на сигнал слотах, соответственно каждое соединение тормозит на всё большее время и так пропорционально нагрузке.
Записан
sidsukana
Гость
Re: Быстродействие сервера
«
Ответ #5 :
Август 03, 2012, 10:48 »
Соединение же одноразовое. Черт, я забыл сказать что используются сессии.
Записан
alexis031182
Гость
Re: Быстродействие сервера
«
Ответ #6 :
Август 03, 2012, 10:59 »
Цитата: sidsukana от Август 03, 2012, 10:36
QTcpServer он же просто принимает соединения, или я не прав? Вся работа же лежит на QTcpSocket(AbstractSocket)?
Да, я имел в виду не использовать связку QTcpServer и QTcpSocket.
Записан
alexis031182
Гость
Re: Быстродействие сервера
«
Ответ #7 :
Август 03, 2012, 11:04 »
Цитата: sidsukana от Август 03, 2012, 10:48
Соединение же одноразовое. Черт, я забыл сказать что используются сессии.
Если клиент - браузер, то как минимум одно соединение с каждого клиента остаётся подключенным. Если конечно сервер работает на HTTP/1.1 и "вручную" не отключает соединение после отправки данных клиенту. Если же клиент - не браузер, то имеет смысл рассмотреть вариант с неодноразовыми подключениями.
Записан
sidsukana
Гость
Re: Быстродействие сервера
«
Ответ #8 :
Август 03, 2012, 11:07 »
В общем сделать на Qt хорошо организованный сервер не выйдет, да?
Я просто к чему. Мне очень нравится фреймворк, и есть задача реализовать такой сервер средствами Qt. Т.е даже без гуи, просто использовать кросс-платформенные возможности Qt не как gui фреймворка.
Записан
alexis031182
Гость
Re: Быстродействие сервера
«
Ответ #9 :
Август 03, 2012, 11:15 »
Цитата: sidsukana от Август 03, 2012, 11:07
В общем сделать на Qt хорошо организованный сервер не выйдет, да?
Выйдет, и довольно быстро сделаете, просто он будет работать медленно при большом количестве соединений.
Цитата: sidsukana от Август 03, 2012, 11:07
Я просто к чему. Мне очень нравится фреймворк, и есть задача реализовать такой сервер средствами Qt. Т.е даже без гуи, просто использовать кросс-платформенные возможности Qt не как gui фреймворка.
Я тоже с этого начал, делал (и делаю) HTTP-сервер. Но потом пришлось отказаться от сетевой части Qt, т.к. скорость работы оставляла желать лучшего в сравнении с тем же nginx. Перешёл на epoll (Linux) - совсем другое дело стало. Так что Вы можете основную часть программы реализовать на Qt, а поддержку сети лучше делать другими средствами.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...