crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Серверное приложение+дб
weldpua2008
  опции профиля:
сообщение 17.1.2009, 3:04
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.1.2009
Пользователь №: 493

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет всем
Нужно написать серверное приложение к которому будит обращаться клиенты.
В общем это информационный сервер который информирует пользователей в локальной сети о каких-то событиях и о остатке на счету.

Клиентскую часть Я собираюсь реализовывать на qt4. Возможности - просмотреть текущий остаток на счету, отправлять на сервер информацию о подключении пользователя(alive) каждые 10-60 сек и в этот момент спрашивать сервер - нет ли сообщений, если есть - вывести их(замегать, пикнуть)

Серверная часть - тут Я теряюсь... ОС будет - Linux or FreeBSD, но FreeBSD скорее всего.
На чем писать?Я пробовал на ANSI C++ - сложно, Сложно у Меня получалось работать с Mysql...
Попробовал qt4 - очень легко...
Но что мудрые скажут про qt4 для серверного приложения?

Серверная часть должна:
авторизировать пользователя,узнать его ip/mac и записать (один раз за подключение)...
выполнять запросы:
узнать остаток на счету
узнать какие сообшения для этого пользователя
узнать какие сообшения для всех пользователей

И отослать это клиенту
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2009, 5:10
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(weldpua2008 @ 17.1.2009, 6:04) *
Но что мудрые скажут про qt4 для серверного приложения?
один из пользователей эксперементально установил, что высоконагруженный сервер на Qt4 - реальность:
Цитата(512es @ 15.11.2008, 4:19) *
вообще сервер работает быстро и надёжно) сколько бы не подключалось клиентов, пакеты им приходят моментально!)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
weldpua2008
  опции профиля:
сообщение 17.1.2009, 23:16
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.1.2009
Пользователь №: 493

Спасибо сказали: 0 раз(а)




Репутация:   0  


А что посоветуете почитать по теме разработки серверов?

Задача:
Что бы данный сервер мог обслуживать до 2000 человек(2-х кратный запас).
Идея у меня такая:

Клиентское ПО подключается к серверу и авторизуется на нем (сервер раз в 1минуту обновляет кеш пар логин пароль из базы данных)
если авторизация н раз безуспешная - надо блокировать доступ к серверу с этого ип на 5-ть минут(внешним скриптом)...
Если успешная делаем INSERT into ... в общем то пользователь в онлайне, так мы избавляемся от того что пользователи бесконеное количество раз авторизируются...Дальше сервер говорит когда ему подключится в следующий раз ( запросить данные)...

Так же для контроля нагрузки сервер сам будет определять когда клиенту забирать инфу :)
Типо имеем эмпирические значения, если пользователей 1000 в онлайне, то можно подключатся(получать инфу из базу данных) только 20-ти одновременно, а остальным позже... И держать у Себя счетчики на 2 мин вперед...
так:
Отослал управляющее сообщение пользователю запросить данные через 1 минуту, счетчик со значением 59(например) увеличил на единицу, если счетчик имеет значение больше максимального - смотрим следующий счетчик...
Максимальное значение = чел в онлайне/ 60 допустим...
Хотя может Я сильно усложняю?...


Если пользователь обратился за упр информацией, то проверяем внутренний счетчик - не превысило ли количество одновременных запросов информации критическое количество...Ну может взломали клиентское ПО и решили заДДОСИТЬ...Или Я не знаю, произошел кратковременный сбой в сети, и ...блин надо почитать про это внимательно будет... клиенты еще не отвалились от сервера(когда это произойдет?), и повторили свои запросы за н секунд, а сервер должен их отработать...и та очередь которую сервер сформировал - будет нарушена...


Дальше надо получить все сообщения для пользователя из базы данных, думаю что так будет оптимально:
SELECT `all`,`user`,`system`,`ostatok` from `massage` WHERE `user`='user' LIMIT 1;
и отдавать...


Вот нарыл статейку:
http://www.opennet.ru/base/dev/server_way.txt.html
Но никак не могу найти простые примеры. Я имею ввиду не исходники apache2,mysql ... т.д.
Есть в doc-ах по qt4/3 пример Threaded Fortune Server Example, но насколько Я понял это Мне не подойдет...


ЗЫ:
Я вот только не пойму Threaded Fortune Server Example справится ли такой вариант? или ему нужно слишком много ресурсов?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 19.1.2009, 17:16
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(weldpua2008 @ 17.1.2009, 23:16) *
А что посоветуете почитать по теме разработки серверов?
<...>тут было много текста<...>

Не вдаваясь в дебри технических подробностей могу посоветовать тебе следующее:
Выкинь нахрен все придуманные фичи и реализуй только главный функционал. Иначе ты просто запутаешься и потонешь. Старый, добрый: "От простого к сложному".

По поводу сервера - не придумывай количество заранее. Абстрактные 2000 человек - они у тебя могут за минуту набрести а могут и не набрести. И 2000 пользователей/минута - ну это не слишком большая циферка для браузинга. Подумай сколько реально данных будет передаваться по сети и выбираться из базы... не слишком много скорее всего. Если ты скорость обновления в два раза снижаешь... то и нагрузка падает... так что про минуту на обновление тоже можно пока забыть.
Не ставь искусственных рамок сам себе - иначе рискуешь остаться с нерешённой задачкой.

PS: думаю qt подойдёт, если особо в нем не стопориться.

Сообщение отредактировал Andrew Selivanov - 19.1.2009, 17:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
weldpua2008
  опции профиля:
сообщение 20.1.2009, 0:47
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.1.2009
Пользователь №: 493

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Andrew Selivanov @ 19.1.2009, 16:16) *
Не вдаваясь в дебри технических подробностей могу посоветовать тебе следующее:
Выкинь нахрен все придуманные фичи и реализуй только главный функционал. Иначе ты просто запутаешься и потонешь. Старый, добрый: "От простого к сложному".

Ну дык самое простое это какая модель треды/форк/FSM... - Я сейчас просто знаю, что это есть, а что будет оптимально могли б старожилы подсказать...
+Как реализовать...
1000 онлайн сессий Я не случайно указал и то что это не основное условие тоже...У клиента будет висеть включенная прога которая будет переодически о чем-о ему сообщать + в ней он сможет увидеть остаток на счету и пополнится...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 20.1.2009, 10:54
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Я бы всё таки посоветовал Apache + PHP/Python.
Там на порядок проще работать и с базами и с сетью. К тому же сразу можешь сделать веб-морду. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 11:56