Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Реализация WEB-сервера (HTTP)


Автор: execoma 11.10.2010, 18:25
Здравствуйте, уважаемые разработчики. У меня есть задача реализовать систему компьютерного тестирования учащихся. Для проведения тестирования есть два варианта:
1. программа сервер <-> программа тестирования (клиент)
2. программа сервер <-> браузер
Вариант 1 достаточно легко решается сокетами, но данный способ не удобен в плане эксплуатации. Задача стоит именно так, чтобы организовать взаимодействие программа сервер <-> браузер, где учащиеся подключаются через браузеры к серверу, который и требуется разработать. Страницы которые нужно передавать серверу являются обычными веб-страницами html + css + графика. Нужно чтобы при подключении через браузер, выдавалась страница index.html из некого каталога, например, C:\temp_connection_2\index.html. При этом нужно чтобы подгружались браузером все связанные с этой страницей файлы (стили, графика, js-скрипты и т.д.). С помощью сокетов я могу передавать браузеру текст, но что касается привязанных файлов то тут я испытываю сложности, т.к. это упирается в протокол HTTP. Я хочу разобраться как мне сделать такой веб-сервер. Я знаю что есть компоненты TServerSocket, TTcpServer, TidTCPServer. Но я никогда не с одними из них не работал и информации в сети скудно на эту тему (что касается использования этих компонентов для создания web-серверов для браузеров). Кто-нибудь сталкивался с подобными задачами? Что-нибудь можете посоветовать?

Автор: borisbn 12.10.2010, 09:28
Писать свой web-сервер на Си++, а тем более на Builder'е, IMHO даже хуже, чем изобретать велосипед. Лучше всего  использовать готовый сервер, например http://tomcat.apache.org/ или http://www.iis.net/ и писать свою задачу на html+css+js с использованием "интернет-языка" типа php

Автор: CPlus 12.10.2010, 11:17
Цитата(borisbn @  12.10.2010,  09:28 Найти цитируемый пост)
Писать свой web-сервер на Си++, а тем более на Builder'е, IMHO даже хуже, чем изобретать велосипед.


Изучите продукт на форуме которого вы находитесь.

Цитата(execoma @  11.10.2010,  18:25 Найти цитируемый пост)
Что-нибудь можете посоветовать?


Для создания своего WEB сервера в С++ Builder присутствует ряд мощных и удобных технологий. Посмотрите примеры видео на сайте Embarcadero. Для создания WEB серверов с поддержкой AJAX+html+css+js  и прочих наворотов, мы, например, используем технологию IntraWEB которая идет в поставке начиная с С++ Builder 2007. Это просто и удобно. 
Для реализации вашей задачи придется потратить порядка 2-х часов. Час на поиск справочной информации (примеры можно посмотреть, например, здесь:  http://iwdemos.codeplex.com/releases/view/35281 и примерно час на саму реализацию.

Автор: TIT 12.10.2010, 12:50
Как сказал Борис выше, изобретать велосипед, даже если это возможно на Билдере, смысла не имеет.
Си очень хороший язык, но не заточен он под веб-технологии. А вам, с вашей задачей нужны именно веб-технологии.
Если вам необходимо реализовать простую форму для тестирования, посмотрите в сторону форм от Docs Google.com.
На их основе вы можете создать форму с вопросами, вариантами ответов и т. д. и собирать все данные от тестируемых в удобной таблице .xls, которую потом можно обрабатывать как вам надо.
Если же необходим автономный вариант системы тестирования, то посмотрите в сторону связки web-server (тут можно долго холиварить, я советую lighttpd, Борис -- Апачей, это на ваш выбор), базы данных для хранения вопросов и ответов (тут тоже можно долго холиварить, я советую postgresql, Борис же посоветует mysql или oracle smile, и php, как самый нативный для веб-проекта скриптовой язык.
Писать собственный веб-сервер, который принимает и отдаёт текстовую информацию и не более того смысла нет. Писать backend для приёма данных формы, записи в БД и последующей обработки лучше, конечно на php, но можно извратиться и на Си написать в формате cgi (но вы проклянёте всё на свете во время деплоинга).

В заключении.
Если решите пойти по пути наименьшего сопротивления, то вам нужно будет:
1. Создать статичный .html файл с формой тестирования, в которой будет форма, контрольки и сабмит.
2. Всё это безобразие будет отдаваться скрипту-обработчику.
3. В качестве веб-сервера поставьте lighttpd, который примет форму в виде POST-запроса и отдаст её скрипту на .php
4. Скрипт на .php проверит и положит все данные из POST'а в базу данных mysql или postgresql и сообщит обратно пользователю, что всё прошло хорошо.

Если у вас появятся вопросы по связке web-server/xSQL/php, то во избежании оффтопа, можете задать любой вопрос мне в почту [email protected]

p. s. to Boris: Будь проклят тот, кто придумал алгоритм прикручивания php к iis'е.

Добавлено через 5 минут и 42 секунды
Цитата(CPlus @ 12.10.2010,  11:17)
Для создания своего WEB сервера в С++ Builder присутствует ряд мощных и удобных технологий. Посмотрите примеры видео на сайте Embarcadero. Для создания WEB серверов с поддержкой AJAX+html+css+js  и прочих наворотов, мы, например, используем технологию IntraWEB которая идет в поставке начиная с С++ Builder 2007. Это просто и удобно. 
Для реализации вашей задачи придется потратить порядка 2-х часов. Час на поиск справочной информации (примеры можно посмотреть, например, здесь:  http://iwdemos.codeplex.com/releases/view/35281 и примерно час на саму реализацию.

Если человек решил написать большой проект, в котором, допустим, админка будет через-вебморду, тогда да, имеет смысл веб-сервер вставить в программу.
Но в данном случае человеку нужна простая форма для тестирования. Форма из пяти вопросов с вариантами ответов и таблица с результатами.

И почему-то мне кажется, что изучить, а главное, написать свой полноценно-работающий веб-сервер -- задача не на два часа.

Автор: CPlus 12.10.2010, 20:53
Цитата(TIT @  12.10.2010,  12:50 Найти цитируемый пост)
Но в данном случае человеку нужна простая форма для тестирования. Форма из пяти вопросов с вариантами ответов и таблица с результатами.


IntraWEB + 2 часа времени. Достаточно просто попробывать.

Автор: execoma 12.10.2010, 21:12
Всем спасибо за советы smile Отдельное спасибо TIT ;) Я пришёл к определенному заключению как буду делать. Я нашёл портированную версию апатча+пхп+мускл+всякая фигня (не требуется установка, все сконфигурированно):
Portable wAMP (Apache, MySQL, PHP): http://blog.x-code.name/2008/04/15/9/
Выкину оттуда всякую фигню и попробую это использовать. Почему апатч? Совершенно бесплатный и по данным из wiki к апатчу очень много всяких плагинов, айда что-нибудь когда-нибудь и пригодиться, например, шифровать свои файлики php, чтобы юзеры там не ковырялись.

Автор: oldcode 15.10.2010, 15:15
К стати, о копирайтах. Это не 
Цитата
© Кортнев & Co
 - а Жоржи Амаду и "Капитаны песка" . Кортнев просто спел перевод темы из известного и любимого мной фильма...

Автор: borisbn 15.10.2010, 15:16
oldcode, знаю, исполнение Кортнева мне больше нравится, чем песня из 
Цитата(oldcode @  15.10.2010,  15:15 Найти цитируемый пост)
из известного и любимого мной фильма

мной тоже smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)