Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.229.253] |
|
Сообщ.
#1
,
|
|
|
Имеется самописный сервер на C++, умеющий отвечать на запросы в json - в этом состоит его основной функционал (отдаёт обновления чата). Основную веб-морду он пока отдаёт тоже сам (в виде html-страничек с js-скриптами, которые через ajax запрашивают обновления чата). Схема работает, но получается что весь бэкэнд я вынужден писать на плюсах, а это, мягко говоря, плохо расширяемая архитектура. Хочется подключить, скажем, apache c php, куда можно поставить готовые CMS (например WordPress); а выход на мой чат был бы только одной из страничек его сайта.
Ну т.е. хотелось бы организовать что-то вроде такого: mysite.ru/wp/index.php - отдаёт обычный сайт на php mysite.ru/chat/?p1=v1&v1=v2 - отдаёт ответы от моего cpp-шного сервера. В принципе проблема легко бы решалась, если бы php-шный сайт работал себе на привычном 80м порту, а cpp-шный сервер - на каком-нибудь другом. Но мне хочется чтобы всё делалось на 80м (другие порты ведь у пользователя могут быть закрыты - на работе злым админом, дома - роутером, который далеко не все умеют настраивать). Пока есть мысли о связке через fastCGI, модули к php или тупо через php-socket (последний вариант уже пробовал, но напрягает создание отдельного php-интерпретатора на каждый запрос пользователя; а ведь в чате это long-pooling, т.е. созданный процесс не просто отработал и умер, а ждёт обновления чата до 15 секунд; собственно из за этого я и перешёл на c++). Или ситуация решается ещё проще, как-то через настройку htaccess? Подскажите, в какую сторону копать? (отказ от ядра на C++ не предлагать, мне нужно понять, как сделать ему веб-интерфейс и подружить с php). P.S. Вопрос размещаю в ветках форума и про C++, и про HTTP сервера, не знаю кого он больше касается (если всё сводится к настройке htaccess, то ко второму, а если нет - то к более "увлекательному" первому). |
Сообщ.
#2
,
Сообщение отклонено: Oleg2004 -
|
Сообщ.
#3
,
|
|
|
Цитата Dark Alf @ P.S. Вопрос размещаю в ветках форума и про C++, и про HTTP сервера, не знаю кого он больше касается (если всё сводится к настройке htaccess, то ко второму, а если нет - то к более "увлекательному" первому). Почему то есть предчувстие, что к сетевому программированию проблема имеет весьма отдаленное отношение, если вообще никакого. |
Сообщ.
#4
,
|
|
|
Dark Alf, можно так сделать: твой самописный сервер получает запрос, парсит его и смотрит что это такое, если чат, то обрабатывает на месте и отдает ответ, иначе отправляет весь запрос в сыром виде на порт apache, получает от него ответ и также в сыром виде возвращает пользователю.
|
Сообщ.
#5
,
|
|
|
Или настроить форвардинг на разные порты, в зависимости от адреса. Один порт отдать под апач, другой под сервер на плюсах.
|
Сообщ.
#6
,
|
|
|
Ну дык 2 разных Location и всё.
|
Сообщ.
#7
,
|
|
|
Цитата Dark Alf @ обновления чата до 15 секунд; Какой такой смысл движку чата держать свой порт и соединение??? 1) Фрэйм чата может сам самостоятельно обновляться средствами тегов HTML, либо JavaScript 2) Запросив обновление, читается таблица БД чата (средствами PHP), чат обновляется 3) В случае необходимости внесения новых постов в БД чата, это вполне решается на средствами PHP Каким боком тут C++??? Если хочется организовать нечто типа push-сервера (а не обновления в 15 сек), PHP должен держать канал самостоятельно, периодически вызывая прогу на C++ для обработки данных. Но если честно, немного непонятно ТЗ, какие именно требования к чату? |
Сообщ.
#8
,
|
|
|
Цитата Как связать самописный сервер на С++ и Apache-php на одном 80м порту? Это решение не подходит для коммерческого кода. Читайте GoF. |
Сообщ.
#9
,
|
|
|
skrambun
M Отвечать следует по сути вопроса |
Сообщ.
#10
,
|
|
|
Если линукс, то есть такая опция: SO_REUSEADDR
можно попытаться на неё взглянуть, но я вижу только если 2 идентичных процесса на него смотрят. Если какая то разница есть в работе 2-х процессов, то больше русскую рулетку напоминать начинает Добавлено Цитата Dark Alf, можно так сделать: твой самописный сервер получает запрос, парсит его и смотрит что это такое, если чат, то обрабатывает на месте и отдает ответ, иначе отправляет весь запрос в сыром виде на порт apache, получает от него ответ и также в сыром виде возвращает пользователю. Да, скорее всего даже так. Они правда будут на разных портах, но конечному пользователю какая разница если все работает и прозрачно. |
Сообщ.
#11
,
|
|
|
Цитата Бобёр @ Если линукс, то есть такая опция: SO_REUSEADDR Пожалуй, это самая мифологизированная опция Шарить один и тот же порт можно будет только для UDP. В случае TCP это лишь ускорит cooldown после освобождения порта, что полезно для высоконагруженных серверов. |
Сообщ.
#12
,
|
|
|
Цитата Dark Alf @ Имеется самописный сервер на C++, умеющий отвечать на запросы в json - в этом состоит его основной функционал (отдаёт обновления чата). Основную веб-морду он пока отдаёт тоже сам (в виде html-страничек с js-скриптами, которые через ajax запрашивают обновления чата). Схема работает, но получается что весь бэкэнд я вынужден писать на плюсах, а это, мягко говоря, плохо расширяемая архитектура. Хочется подключить, скажем, apache c php, куда можно поставить готовые CMS (например WordPress); а выход на мой чат был бы только одной из страничек его сайта. Ну т.е. хотелось бы организовать что-то вроде такого: mysite.ru/wp/index.php - отдаёт обычный сайт на php mysite.ru/chat/?p1=v1&v1=v2 - отдаёт ответы от моего cpp-шного сервера. В принципе проблема легко бы решалась, если бы php-шный сайт работал себе на привычном 80м порту, а cpp-шный сервер - на каком-нибудь другом. Но мне хочется чтобы всё делалось на 80м (другие порты ведь у пользователя могут быть закрыты - на работе злым админом, дома - роутером, который далеко не все умеют настраивать). Пока есть мысли о связке через fastCGI, модули к php или тупо через php-socket (последний вариант уже пробовал, но напрягает создание отдельного php-интерпретатора на каждый запрос пользователя; а ведь в чате это long-pooling, т.е. созданный процесс не просто отработал и умер, а ждёт обновления чата до 15 секунд; собственно из за этого я и перешёл на c++). Или ситуация решается ещё проще, как-то через настройку htaccess? Подскажите, в какую сторону копать? (отказ от ядра на C++ не предлагать, мне нужно понять, как сделать ему веб-интерфейс и подружить с php). P.S. Вопрос размещаю в ветках форума и про C++, и про HTTP сервера, не знаю кого он больше касается (если всё сводится к настройке htaccess, то ко второму, а если нет - то к более "увлекательному" первому). Предлагаю написать на C++ программу сервер для работы на 80 tcp порту. 1. Программа должна выполнять роль сервера для браузера пользователя и роль клиента для программ на удалённых машинах (например на Hyper-V) работающих на 80 порту каждая на своей машине. 2. Программа рассматривает запросы и отправляет на нужную удалённую машину на 80 порт. Получает ответ сервера и пересылает ответ своему клиенту (браузеру пользователя). Фактически программа выполняет роль посредника. По такому принципу работают все маршрутизаторы и всё остальное. При этом удалённые машины могут находится вне прямого доступа для браузера пользователя, например в локальной сети или в другом конце Мира, на том же Hyper-V сервере или в другой Галактике соединение с которой сервером настроено через маршрут к сети на интерфейсе VPN-соединения на маршрутизаторе. |