Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Web интерфейс программы 
:(
    Опции темы
TheDestroyer
Дата 13.5.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

Репутация: нет
Всего: нет



Нужно сделать web-интерфейс для программы. Т.е. чтобы заходя браузером на определенный порт компьютера, где запущена эта программа можно было увидеть сайт, через который можно управлять данной программой. Также нужно обеспечить кроссплатформенность программы (windows, linux). Написание программы на php + веб сервер не подходит. Т.к. необходимо иметь программу и веб сервер в одном комплекте.
Вопросы:
1. Если писать программу на Borland C++, как начать?
Вроде нужно создать новый проект:  File - New - Other - web Server Application. Тут сразу встает вопрос, какой тип выбрать далее. Т.к. я не собираюсь писать ни CGI скрипт, ни библиотеку к апаче, а самостоятельный exe-шник, то, похоже, надо выбрать последний пункт - Web App Debugger Executable... Подскажите что и как, плз?

2. По кроссплатформенности, по идее, можно написать windows приложение и для запуска под linux использовать WINE- эмулятор windows (не совсем эмулятор, как они пишут у себя на сайте). Тогда сразу встает вопрос, если я открываю порт на компьютере API функциями, то откроется ли порт под linux через этот WINE?

3. Если для кроссплатформенности писать не на Borland C++, а на чем-нибудь другом, то на чем? Сразу на ум приходит .NET, ведь оно для кроссплатформенности вроде как и сделано. Но я в нем новичек. Посоветуйте, стоит ли заниматься написанием данной программы например на C# .NET или все-таки на c++ не так уж и сложно реализовать?

Приветствуются все советы и ссылки
PM MAIL   Вверх
jonie
Дата 13.5.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



пример в аттаче (архив 7z)

Присоединённый файл ( Кол-во скачиваний: 47 )
Присоединённый файл  pfm.7z.doc 42,51 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Vasay
Дата 13.5.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



TheDestroyer, 

Цитата

1. Если писать программу на Borland C++, как начать?
Вроде нужно создать новый проект:  File - New - Other - web Server Application. Тут сразу встает вопрос, какой тип выбрать далее. Т.к. я не собираюсь писать ни CGI скрипт, ни библиотеку к апаче, а самостоятельный exe-шник, то, похоже, надо выбрать последний пункт - Web App Debugger Executable... Подскажите что и как, плз?


Только вчера был пост на эту тему:
http://forum.vingrad.ru/forum/topic-259024.html

Цитата

3. Если для кроссплатформенности писать не на Borland C++, а на чем-нибудь другом, то на чем? Сразу на ум приходит .NET, ведь оно для кроссплатформенности вроде как и сделано. Но я в нем новичек. Посоветуйте, стоит ли заниматься написанием данной программы например на C# .NET или все-таки на c++ не так уж и сложно реализовать?


Есть, конечно, mono для C#, но он сильно отстает от  MS версии .NET, да и с лицензией там не так чисто. 
Если кросплатформенность нужна - то это либо Java (кстати, есть классы, реализующие функционал web-сервера), либо Qt (и ему подобные кросплатформенные библиотеки).


п.с. а вы уверены, что вам нужен такой изврат как веб-сервер в вашей программе?

Это сообщение отредактировал(а) Vasay - 13.5.2009, 19:30


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Любитель
Дата 13.5.2009, 19:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Vasay @  13.5.2009,  19:29 Найти цитируемый пост)
Если кросплатформенность нужна - то это либо Java (кстати, есть классы, реализующие функционал web-сервера), либо Qt (и ему подобные кросплатформенные библиотеки).

Python/Ruby почему не рассматриваются?!

Цитата(Vasay @  13.5.2009,  19:29 Найти цитируемый пост)
п.с. а вы уверены, что вам нужен такой изврат как веб-сервер в вашей программе?

Почему изврат? WebUI управления плеером или торрент-клиентом вещь очень типичная...


--------------------
PM MAIL ICQ Skype   Вверх
Vasay
Дата 13.5.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



Цитата

Python/Ruby почему не рассматриваются?!

Python - думаю тоже возможно. Просто я с ним и его возможностями незнаком.
Ruby - в те времена когда я им интересовался, для написания веб-сервера он был не пригоден, так как имел проблемы с многопоточностью.


Цитата

Почему изврат? WebUI управления плеером или торрент-клиентом вещь очень типичная... 


Может, с "изварат" я погорячился, иногда такой подход может быть необходим, переформулирую вопрос - TheDestroyer а Вы точно уверены, что Вам это нужно (может использование веб-сервера будет удобней, или вообще запустить приложение в контексте сервера приложений)?

Это сообщение отредактировал(а) Vasay - 13.5.2009, 20:33


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Vasay
Дата 13.5.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



Да, если речь идет об веб-интерфейсе к программе (т.е. веб-сервере внутри программы), то начинать надо не так:
Цитата

1. Если писать программу на Borland C++, как начать?
Вроде нужно создать новый проект:  File - New - Other - web Server Application. Тут сразу встает вопрос, какой тип выбрать далее. Т.к. я не собираюсь писать ни CGI скрипт, ни библиотеку к апаче, а самостоятельный exe-шник, то, похоже, надо выбрать последний пункт - Web App Debugger Executable... Подскажите что и как, плз?


А создать обычное десктоп приложение (с GUI или без - зависит от Вашей задачи), и внутри него, в отдельном потоке реализовать вебсервер -  открыть сокет на прослушивание определенного порта и обрабатывать входящие запросы... Недавно на этом форуме мелькали примеры, как это реализуется на с++ и Java. 

Однако, я не стал бы использовать Builder для кросплатформенной задачи. Если есть желание писать именно на c++, то посмотрите в сторону qt 

Вот, кстати, примерчик: http://doc.crossplatform.ru/qt/4.5.0/netwo...tuneserver.html. Для работы из веб-браузера потребуется реализовать протокол HTTP (вот пример для QT http://doc.trolltech.com/solutions/3/qtser...ple-server.html ).

Единственный минус QT - то что требуется перекомпиляция под разные системы.  С Java проще - достаточно наличие jre в системе.

Добавлено через 13 минут и 15 секунд
В Java есть класс реализующий HTTP сервер, предназначенный как раз для реализации встроенных http серверов: http://java.sun.com/javase/6/docs/jre/api/...ge-summary.html

Это сообщение отредактировал(а) Vasay - 13.5.2009, 20:55


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
TheDestroyer
Дата 14.5.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

Репутация: нет
Всего: нет



Спасибо за ответы.
Поясню цель приложения, веб интерфейс это его главная функция, оно должно предоставлять пользователю управление собой через браузер. Необходим самостоятельный сервер для того, чтобы не зависеть от установленного веб сервера у пользователя (его может и не быть) и его настроек. Также надо чтобы никто не копался в исходном коде и не модифицировал его. Значит надо в конечном итоге иметь скомпилированный фаил.
jonie, это под VC++?
Про Qt даже не слышал, интересное решение по кроссплатформенности.
Получается по требованиям отвечают так:
Самостоятельный веб сервер: BC++, .NET, Java, Qt, Python, Ruby(?)
Кроссплатформенность: BC++((?)Через WINE), .NET((?) необходим Mono), Java, Qt, Python, Ruby
В принципе, перекомпиляция под разные операционные системы не критична.
Защита: BC++, .NET, Java, Qt, Python(?), Ruby(?). С Ruby дело не имел, на Python-е кое-что делал, но там все в исходных кодах, по которым при запуске среды создавались откомпилированные файлы и они уже выполнялись. Наверное для защиты можно распространять только откомпилированные файлы.

У кого есть опыт или возможность проверить будет ли корректно работать созданный в BC++ 2009 веб сервер под Linux (из под WINE), сообщите, плз.

Пока изучаю все по данной теме. Все советы, примеры и ссылки приветствуются.
PM MAIL   Вверх
isergey
Дата 14.5.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 28.5.2008

Репутация: нет
Всего: нет



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

Есть в питоне, в стандартной библиотеке, simpleCGIServer. Запускаешь скрипт и у тебя работающий CGI сервер. Укажешь ему где располагается директория с CGI скриптами, а в самих скриптах обрабатывай http запросы и пиши результаты в файл общения с основной программой. CGI скрипты можешь писать на чем хочешь, но лучше на питоне, для этого там тоже есть библиотека CGI.

Удачные пример управление программой через веб интерфейс - это всем известный µTorrent http://www.utorrent.com/documentation/webui/

Конечно было бы не плохо, если бы ты в своей основной программе веб сервер сделал сам. Тогда получишь опыт работы с сетевыми сокетами и опыт работы с многопоточностью. Единственный минус в том, что такое решение может быт дырявым и не стабильным (неправильно обработал данные и все твое приложение падает). Но, как говориться, волков бояться  - в лес не ходить smile Дерзай!

ЗЫ. Только не надо использовать никакие с++ билдеры.
PM MAIL   Вверх
TheDestroyer
Дата 14.5.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

Репутация: нет
Всего: нет



WebUi сам активно использую, с многопоточностью опыт работы есть.
CGI скрипты, хорошо, но не подходят из-за открытости исходного кода как и php. Так у меня есть написанный на php вариант программы, но в php под windows не работает многопоточность (forking) и исходный код не скроешь (про Zend и т.п. знаю, но это не выход в данном случае).

Склоняюсь к Qt, качаю и буду ставить. На сайте Qt они предлагают использовать их родную среду, также народ пишет, что очень удобно использовать Qt в MS VC++.
Скажите пожалуйста, какую среду для разработки лучше использовать?
PM MAIL   Вверх
isergey
Дата 14.5.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 28.5.2008

Репутация: нет
Всего: нет



Я конечно не знаю, но по моему,  если ты не используешь коммерческую версию QT, тебе нужно открывать исходные коды.

А по поводу скрытия исходного кода, никто не запрещает использовать питон скрипты компилированные в байт код т.е. *.pyc
PM MAIL   Вверх
sdukshis
Дата 14.5.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 23.3.2009

Репутация: нет
Всего: 1



Qt - хорошая библиотека для кроссплатформенной разработки, но рассчитана она, в первую очередь, на создание клиентских приложений.

Из все платформонезависимости Вам скорее всего понадобятся только сокеты, потоки и операции с файловой системой.

Для сокетов можно использовать ASIO http://www.boost.org/doc/libs/1_39_0/doc/h...boost_asio.html
Для потоков Boost Tread http://www.boost.org/doc/libs/1_39_0/doc/html/thread.html
Для работы с файловой системой Boost Filesystem http://www.boost.org/doc/libs/1_39_0/libs/...m/doc/index.htm

К тому же открытым остается вопрос демонизации, который по разному решается на различных платформах (насколько я знаю кроссплатформенной библиотеки нет). Хотя это можно сделать в ручную.

Я думаю, что оптимальным вариантов здесь будет не использование библиотек boost или qt, а собственный платформонезависимый слой и условная компиляция.

К сожаления с Java работал очень мало. Но если все эти вопросы там хорошо решены, то выбор явно в её пользу.
PM MAIL   Вверх
Любитель
Дата 14.5.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(isergey @  14.5.2009,  13:54 Найти цитируемый пост)
Я конечно не знаю, но по моему,  если ты не используешь коммерческую версию QT, тебе нужно открывать исходные коды.

Qt с 4.5 под LGPL. Ни раз уже здесь обсуждалось smile

Цитата(isergey @  14.5.2009,  13:54 Найти цитируемый пост)
А по поводу скрытия исходного кода, никто не запрещает использовать питон скрипты компилированные в байт код т.е. *.pyc 

А вот это да. Более того - нормальных декомпиляторов питона (как ни странно) мне лично найти не удалось.. Т. е. по крайней мере новичков отпугнёт (что не скажешь о яве или дотНет).


--------------------
PM MAIL ICQ Skype   Вверх
xvr
Дата 15.5.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Абсолютно независимая реализация WEB сервера на голом С++ занимает около 1000 строк. Используются голые сокеты (исходник для Windows, но платформо зависимая часть winsock'а может легко быть портированна под linux и пр)
(Файлы StdAfx.* и utils.* - общие файлы всего проекта, не только WEB сервера. 90% содержимого для WEB сервера не нужно)

Присоединённый файл ( Кол-во скачиваний: 40 )
Присоединённый файл  websrv.zip 15,20 Kb
PM MAIL   Вверх
TheDestroyer
Дата 20.5.2009, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

Репутация: нет
Всего: нет



Результаты поисков (могут быть полезными всем, кто ищет информацию по данной теме):
Веб серверы с исходным кодом с поддержкой серверных скриптовых языков:
http://code.google.com/p/mongoose/
http://www.lighttpd.net/

Простые веб серверы с отдельной директорией под html странички:
http://www.pion.org/projects/pion-network-library
http://www.pablosoftwaresolutions.com/html...web_server.html

Библиотеки:
http://www.webtoolkit.eu/
http://www.qtsoftware.com/
http://www.boost.org/doc/libs/1_39_0/doc/h...boost_asio.html

Интересные примеры веб серверов, webio умеет создавать единый исполняемый фаил со встроенными страничками:
http://www.codeproject.com/KB/IP/webio.aspx
http://www.codeproject.com/KB/IP/webem.aspx
http://www.adp-gmbh.ch/win/misc/webserver.html
http://xaxxon.slackworks.com/ehs/

jonie и xvr, спасибо за примеры.
Пример jonie откомпилировался, буду разбираться что к чему.
Пример xvr не получается откомпилировать, почему-то не поинимает тип WSAEVENT в tcp_server.h. Видимо, что-то надо include-ить. Компилирую в В Visual C++, в нем я новичек, так что если несложно, подскажите что не так.
Делаю так: чтобы создать проект выбираю в меню Фаил - Создать - Проект из существующего кода - добавляю все файлы в папке.
PM MAIL   Вверх
xvr
Дата 20.5.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



WSAEVENT определен в winsock2.h, подключается через windows.h, который в свою очередь подключается через StdAfx.h -> utils.h

В любом случае от моих сорцов надо будет отрезать лишнее (оно там есть), и приделать свое (хотя бы доступ к файлам, которые вы хотите передавать через WEB сервер - оригинал их доставал из zip архива, помещенного в ресурсы exe'ника)

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.