![]() |
|
![]() ![]() ![]() |
|
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Всем здрасти.
Изучаю qt в боевом режиме, нужен совет по направлению копания. Итак задача. Клиент - сервер - бд(постгрес) Изначально предполагалось писать клиента который напрямую обращается в БД. Но так как пользователей будет много, неустраивает заведение всех этих пользователей в пользователи БД. Пришел к такому: написать "тонкий" сервер который будет подключаться к БД аутентифицируясь пользователем БД, затем подключившийся клиент посылает аутентифицируется на сервере, при этом пользователи хранятся в базе проекта. После этого нужно пердавать данные между БД и клиентом. Т.е. сервер в основном нужен для управления правами. В будущем часть функционала будет перенесена на сервер, но в данный момент это реализовать будет сложнее изза отсутствия опыта. Так вот вопрос, с помощью каких классов компонентов я смогу реализовать такую структуру? (соответственно клиент и сервер пока будут на QT) Сервер - линукс, клиенты линукс и виндовс (может еще и макос) Большое спасибо за внимание. Это сообщение отредактировал(а) LostAlly - 3.12.2009, 19:14 |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Недавно закончил подобный проект, был сервер, который аутентифицировал клиентов и выполнял запросы в соответсвии с правами, которые хранились в базе данных.... единтсвенно у меня всё работало по протоколу SSL. Собственно, что тебе может понадобиться Для работы с сетью: QTcpServer, QTcpSocket Для работы с бд: QSqlDatabase, QSqlQuery Для работы с потоками (у меня был многопоточный сервер): QThread Удачи Добавлено через 2 минуты и 18 секунд По поводу клиентов, там может понадобиться всё, что твоей душе угодно (я про графику) + QTcpSocket для подключений к серверу Это сообщение отредактировал(а) null56 - 3.12.2009, 21:13 |
|||
|
||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Большое спасибо за ответ.
А каким методом передавали данные от сервера к клиенту? С сервером более менее все понятно он с базой общается через QSqlDatabase, QSqlQuery, а какими методами клиент запрашивает нужные данные через сервер? (это наиболее непонятный для меня момент, если городить свой протокол взаимодействия, то это уже получится проще нормальный сервер написать) |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
ИМХО SOAP
|
|||
|
||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
На сколько я понимаю, потом придется переписать кучу всего, чтобы убрать SOAP, а мне хотелось бы на данный момнет минимальных усилий по написанию сервера. А в дальнейшем постепенное перемещение определенных функций с клиента на сервер. А можно ли: Клиент герерирует SQL запрос передает его серверу сервер отправляет его БД, сервер возвращает результат в таком виде, как если бы клиент напрямую его получил от бд. Както так. |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
если выбирать между 3х звенкой и заведением пользователей в системе я п выбрал 2ое, ибо гемороя меньше + даже есть положительные моменты: например модно вести логирование на уровне базы |
|||
|
||||
null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
что значит каким методами.... клиент должен что - то отправить КАКИЕ-ТО ДАННЫЕ
сервер должен их прочитать и понять
под какими-то данными я подразумеваю набор команд и дополнительную инфу = иными словами протокол. Протокол создать работа творческая и не нудная, тут 1000 и один способ, можешь свой придумать, со своим набором команд или взять уже существующий... Можешь в качестве варианта взять протокол основанный на xml, тем более классов в Qt достаточно для его реализации и парсинга. Jabber вроде так и работает на протоколе, основанном на xml. Если не хочешь писать трехзвенку, как тебе написал chaos, то можешь действительно использовать учетные записи самое системы или СУБД |
||||
|
|||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Теперь я получил полный ответ ![]() Ну я вас понял, в моем случае проще всего будет использовать xml-rpc.(SOAP более тяжел) Большое спасибо за ответы, вы помогли мне определиться и выбрать напраление движения. P.S. с удовольстивем поставил бы плюсы, но пока немогу этого сделать. Это сообщение отредактировал(а) LostAlly - 4.12.2009, 18:18 |
|||
|
||||
Kipter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
ИМХО проще свой протокол быстренько накатать чем использовать готовый который заставит ваше приложение под него прогибаться, + который может иметь много своих особенностей работы.
Темболее свой протокол можно реализовать по простому, принимаемые данные десериализовать и где нибудь в начала пакета данных указывать численный метод команды протокола
ну в таком духе...... единственное что если клиентов реально мнооооого.... то сервер лучше не на Qt писать, ибо сигналы все таки медленноваты ![]() Это сообщение отредактировал(а) Kipter - 6.12.2009, 15:25 |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Где можно посмотреть сравнение скорости? Есть пример? Какой из методов использовался при написании сервера? Многопоточный, однопоточный? Реально много это сколько? Предел в 10000 клиентов как на DC хабах? А вообще практически куда ни посмотреть везде используются альтернативные сервера. Ресурсы не безграничны и это зависит не только от библиотеки, но и от ОС и от железа и от пропускной способности канала. Это сообщение отредактировал(а) SABROG - 6.12.2009, 17:05 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |