XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
J64_

offline
Опыт: 4,724
Активность:
Свой сервер на С++\Qt
Вот недавно начал изучать веб программирование. Ситуация с клиентом всё просто, там html\css\javascript и AJAX запросы. А вот серверная сторона, она вообще какая?
Вот скачал себе сервер Apache. Немножко погуглив узнал про CGI. Сделал. На клиенте получал ответы с сервера. Возможно бред, но подумал что эти скрипты будут слишком не оптимальными если каждый раз вызывать их. Замечу, что я делаю на C\Qt(и то Qt на ходу изучаю). Поэтому решил сделать простенький C CGI скрипт, общий для всех, который будет просто записывать присылаемый запрос в файл. А другая программа, которая будет всегда запущена, ловит изменение файла, исполняет запрос и записывает результат, опять таки, в файл. Далее скрипт ждет изменение файла-результата и просто выводит в консоль как все другие CGI программы, и всё, скрипт-программа заканчивается.
Конечно можно было прослушивать порты и так далее, но простого решения я не нашел. Ещё пытался внедрится в процесс основной программы - там тоже всё через зад, даже через Qt. Правда потом узнал что такое QML, но как это вообще поддерживается на клиенте я не понял.
Что же собственно делает Apache? Неужели там нету простой привязки с C++?
Про базы данных вообще молчу. Зачем там нужно использовать SQL? Можно же просто расположить всё по папочкам и файлам.
В общем ткните в нужную статью или вкратце расскажите.
Старый 09.01.2014, 03:39
ScorpioT1000
Работаем
offline
Опыт: отключен
Про базы данных вообще молчу. Зачем там нужно использовать SQL? Можно же просто расположить всё по папочкам и файлам.
тем что ext4 и любая другая файловая система значительно проигрывает по скорости работы любой базе данных?
тут надо не про кьюти читать, а про архитектуру
зачем тебе понадобился html/ajax сервер на qt? почти всегда это можно сделать проще. а если не требуется, то у qt скорее всего есть свой фреймворк для веб сервера, надо поискать
ScorpioT1000 добавил:
на c++ трудно замутить простую MVC архитектуру например
www.webtoolkit.eu/wt/ru но вот тут есть решения
в целом можно что угодно замутить, вопрос цены времени =)
ScorpioT1000 добавил:
дай пример кода, что ты пытался сделать, я оценю уровень твоих знаний и скину линки на статьи)
Старый 09.01.2014, 04:39
J64_

offline
Опыт: 4,724
Активность:
ScorpioT1000:
тем что ext4 и любая другая файловая система значительно проигрывает по скорости работы любой базе данных?
тут надо не про кьюти читать, а про архитектуру
То есть там они нативно поддерживают SQL или что? А ведь всё упирается в работе диска.
зачем тебе понадобился html/ajax сервер на qt? почти всегда это можно сделать проще. а если не требуется, то у qt скорее всего есть свой фреймворк для веб сервера, надо поискать
ScorpioT1000 добавил:
на c++ трудно замутить простую MVC архитектуру например
www.webtoolkit.eu/wt/ru но вот тут есть решения
в целом можно что угодно замутить, вопрос цены времени =)
Php для слабаков, C#\Java как нибудь потом изучу... Просто кпп нативный для меня.
понимаю что нуб в этом деле, но всё же
Judycaster64 добавил:
ScorpioT1000, вот так я рвал целку :-)
Прикрепленные файлы
Тип файла: zip SERVER.zip (4.8 Кбайт, 22 просмотров )
Старый 09.01.2014, 04:42
ScorpioT1000
Работаем
offline
Опыт: отключен
php очень мощный инструмент для быстрого написания http сервера, так же как и ruby on rails
но не суть
о есть там они нативно поддерживают SQL или что?
sql - язык описания запросов к СУРБД, qt гораздо обширнее, там есть адаптеры как к sql базам, так и к nosql базам
(на то они и плюсы что там всё есть)
как бы сделал я:
перешёл бы на .NET
если нет возможности перейти на дотнет,
архитектура примерно следующая (первое что пришло в голову)
  • vendor (сторонние приложения, это может быть просто include файлы и директория с заголовками и .so-шками/.dll-ками)
  • model ( здесь список классов, унаследованных от ORM Entity и некоторые другие с бизнес-логикой, их придется писать самому, используя sql + orm )
    • event router (здесь самый корень http сервера, это то что преобразовывает URI запрос и в зависимости от его содержимого направляет на разные /controller или выдает 404, также он создает Event и передает его в контроллеры, которые несут в контейнерах http POST/GET содержимое, после всего формирует response)
    • client-server менеджер, на каждый http request (называется bootstrap) создает поток/процесс (лучше процесс) с event router
    • authorization (управление сессией (таблицы cookie => session id => guest/user id), авторизация и аутентификация, связана с таблицей бд "users")
    • permission manager (менеджер прав пользоваелей, ACL или RBAC приветствуется)
    • template manager (шаблонизатор, работает с /view, обрабатывая [[директивы]] тут надо подумать, есть ряд библиотек stackoverflow.com/questions/537820/whats-a-good-html-template-en... )
    • resource manager (менеджер ресурсов базы данных твоего веб-сервиса, это уже точно бизнес-логика и решать, как всё происходит только тебе)
    • html resource manager (правильно вставляет в шаблоны javascript и css ресурсы)
    • чисто для примера, какой у меня получился список моделей на пхп: imgur.com/4HW5Dor
    • ...
  • view (список .html шаблонов (с примерами), это уже является "данными" для c++, их при запуске рекурсивно ищет template manager и рендерит в зависимости от того, что надо контроллерам)
    • index
      • index.html - например, <html><head>[[htmlResourcesTop]]</head><body>Это мой сайт. [[INCLUDE(auth/user_panel)]] [[htmlResourcesBottom]]</body></html>
    • auth
      • user_panel.html - например, [[IF(is_logged_in)]] Меня зовут [[username]] ! [[ELSE]] <a href="/login">Войти в систему</a> или <a href="/register">зарегистрироваться</a> [[ENDIF]]
      • login.html - тут блок входа в систему
      • register.html - тут блок регистрации
    • ... - тут ещё куча разных блоков и подблоков
  • controller (список контроллеров, по сути то, о чем знает route manager и вызывает в зависимости от uri, оно может быть каким угодно, но я выбрал обычный пример)
    • index (индекс - корень)
      • index.cpp ( mysite.com )
        • любой контроллер наследник класса контроллера, но в целом это класс с методом run, принимающим event (из event router) со списком роутов (в данном случае просто корень) и аргументов http POST и GET запросов
        • он создает в этом методе свои модели, обрабатывает содержимое event, передает некоторое в модели (например в auth передаст cookie session id, чтобы достать из бд айди юзера и его данные), после чего все это соединяет в один view и возвращает его (стоит заметить, что view не является страницей, страницу уже дособирает template manager последней операцией, прежде чем вернуть ответ клиенту)
      • register.cpp ( mysite.com/register )
      • login.cpp ( mysite.com/login )
      • login_complete.cpp ( mysite.com/login_complete.cpp )
    • profile
      • index.cpp ( mysite.com/profile )
      • edit.cpp ( mysite.com/profile/edit, в том числе запросы вида mysite.com/profile/edit/123456 )
    • бизнес-логика или всё, для чего этот сайт создавался
  • resources (ресурсы добавляет html resource manager когда в шаблоне вызывается htmlResourcesTop/Bottom, простейший вариант сделать эту папку доступной извне по адресу mysite.com/resource, сложнее - генерация assets)
    • css
      • common.css
    • js
    • img
    • fonts
  • user
    • upload (папка для хранения файлов, загруженных юзерами, там тоже должен быть свой менеджер для этого итп)
ScorpioT1000 добавил:
стоит заметить, что выполняется вся цепочка bootstrap -> event -> controller -> models -> views -> response каждый запрос сервера заного, все операции достаются и сохраняются в базе данных и нигде больше (кроме /user/upload), не важно, крутится ли твой сервер или его каждый раз запускает демон
ScorpioT1000 добавил:
и это я ещё не говорил о миграциях и том, как организована сама бд, но начать несложно, надо просто поставить мощный инструмент управления базой, они для каждой сурбд варьируются
ScorpioT1000 добавил:
и да, по поводу ajax - там просто у event должно быть проперти, что это ajax и у контроллеров тоже какойто признак, что я контроллер, который работает с аяксом
остальное всё так же
ну и может ещё контроллен не вызывает view, а генерит json - всё отличие

Отредактировано ScorpioT1000, 09.01.2014 в 05:54.
Старый 09.01.2014, 05:57
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Judycaster64:
Возможно бред, но подумал что эти скрипты будут слишком не оптимальными если каждый раз вызывать их.
Бред. Преждевременная оптимизация - корень всех зол. Время отсылки запроса >> времени обращения к базе >> времени исполнения кода.
Лучше вообще забить на оптимизацию, пока не разберёшься, где и что юзается и где какие проблемы надо решать. В принципе все изначально на скорость ориентируются, но на деле редко где нужны супер оптимизации(хотя в геймдеве и модмейкинге всё же нужны), но выбор языка не решает всех проблем. Неправильно выбранный алгоритм языком врядли компенсируешь. А ещё есть архитектурные особенности железа и т.д.
Тебе верно советуют, что лучше архитектуру поизучать, MV*-паттерны вполне себе тема для изучения. По ним, правда, хороших материалов не смогу посоветовать, сам ищу. Но в процессе реализации оных взгляд на это всё формируется.
С другой стороны таск для изучения плюсов вполне нормальный, но не надо боготворить своё произведение, через пару лет(а скорей всего раньше) ты на него будешь с ужасом смотреть.
Ну и кстати для гуёвых приложений лучше перейти на дот.нет.
Если веб приложения, я бы RoR посоветовал, но есть куча альтернатив
Старый 10.01.2014, 18:44
adic3x

offline
Опыт: 107,539
Активность:
df Hunter
Поинт?! Вот так внезапно, тебя-же еще при Тонике забанили как будто? Или ты сам ушел, уже не помню. Рад тебя видеть)
Старый 10.01.2014, 21:50
Toadcop

offline
Опыт: 53,013
Активность:


Toadcop добавил:
Цитата:
Бред. Преждевременная оптимизация - корень всех зол.

скажи это кеш миссам u_u
Старый 12.01.2014, 22:03
Olorin

offline
Опыт: 11,841
Активность:
Judycaster64:
Вот недавно начал изучать веб программирование. Ситуация с клиентом всё просто, там html\css\javascript и AJAX запросы. А вот серверная сторона, она вообще какая?
Грубо говоря, серверная часть - это любая программа/скрипт, которая в итоге своей работы выдаёт html-страницу, которую передаёт клиенту через web-сервер (Apache, nginx, lighttp, whatever). Писать можно практически на любом языке, при определённой доле изврата. Можно, конечно, и на крестах, но на чистых крестах это выйдет сильно-сильно долго. Ты больше будет ковыряться в костылях C++, чем разбираться в том, как работает веб. Я бы тебе советовал выбрать что-нибудь из списка: PHP, Python, Perl, Ruby. Если очень хочется кресты, то можно и их, конечно, но выкини Qt. Qt для десктопа всё же.
Вот скачал себе сервер Apache. Немножко погуглив узнал про CGI. Сделал. На клиенте получал ответы с сервера. Возможно бред, но подумал что эти скрипты будут слишком не оптимальными если каждый раз вызывать их. Замечу, что я делаю на C\Qt(и то Qt на ходу изучаю). Поэтому решил сделать простенький C CGI скрипт, общий для всех, который будет просто записывать присылаемый запрос в файл. А другая программа, которая будет всегда запущена, ловит изменение файла, исполняет запрос и записывает результат, опять таки, в файл. Далее скрипт ждет изменение файла-результата и просто выводит в консоль как все другие CGI программы, и всё, скрипт-программа заканчивается.
Поздравляю, ты только что изобрёл модель сервера Prefork. Причём, лисапед вышел жутко кривой, т.к. ты получишь страшные потери на работе с ФС.
Конечно можно было прослушивать порты и так далее, но простого решения я не нашел. Ещё пытался внедрится в процесс основной программы - там тоже всё через зад, даже через Qt. Правда потом узнал что такое QML, но как это вообще поддерживается на клиенте я не понял.
В процесс какой основной программы ты пытался внедриться и зачем?
Что же собственно делает Apache? Неужели там нету простой привязки с C++?
Апач обрабатывает клиентские запросы, вызывает соответствующие скрипты на сервере, отдаёт статические файлы. Про то, как заставлять работать Апач с сишными бинарями, можно почитать тут - habrahabr.ru/post/61532
Про базы данных вообще молчу. Зачем там нужно использовать SQL? Можно же просто расположить всё по папочкам и файлам.
скорость работы бд несравнимо выше скорости работы фс. На данном этами просто прими это как факт.
Старый 07.02.2014, 17:59
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:23.