Как правильно соединить клиентские соединения между интерфейсным веб-сервером и бэкэндом, работающим под управлением CherryPy?

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

В настоящее время мой интерфейс построен на основе BaseHTTPServer.HTTPServer, а серверная часть — CherryPy.

Итак, вопрос: есть ли способ взять эти HTTP-запросы/клиентские соединения и вставить их на сервер CherryPy, чтобы получить HTTP-ответ? Одним из очевидных решений является запуск экземпляра бэкенда CherryPy на локальном порту или с использованием сокетов домена UNIX, а затем внешний веб-сервер устанавливает соединение с бэкэндом и передает любые запросы/ответы. Очевидно, что это не идеально из-за накладных расходов.

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

Я просматривал исходный код CherryPy, чтобы найти способ сделать это, и в настоящее время пытаюсь изменить wsgiserver.CherryPyWSGIServer, но это становится довольно сложным и, вероятно, не лучшим подходом.


person user464164    schedule 06.10.2010    source источник
comment
Какую предварительную обработку вы делаете? Решение может быть таким же простым, как расширение CherryPy с помощью нескольких строк кода.   -  person fumanchu    schedule 07.10.2010
comment
Я пытаюсь обрабатывать запросы на обновление HTTP/1.1 (см. stackoverflow.com/questions/3859823/). Я бы хотел, чтобы CherryPy отправил HTTP-ответ, а затем передал сокет моему обработчику протокола.   -  person user464164    schedule 07.10.2010


Ответы (2)


Является ли ваше основное приложение приложением wsgi? Если это так, вы можете написать промежуточное ПО., который обертывает его и выполняет всю обработку запросов перед передачей в основное приложение.

Если это возможно, вам не придется запускать два веб-сервера и избежать всех проблем, с которыми вы сталкиваетесь.

person Ben    schedule 06.10.2010
comment
Спасибо. Это должно делать свое дело. Изначально я хотел разделить интерфейс и серверную часть, чтобы при необходимости можно было заменить CherryPy, но похоже, что это больше проблем, чем пользы. Кроме того, я предполагаю, что при использовании промежуточного программного обеспечения WSGI, если альтернативный бэкенд совместим с WSGI, замена CherryPy другим веб-сервером должна быть довольно простой. - person user464164; 06.10.2010
comment
Да, я переместил приложения из mod_wsgi и apache в uwsgi и nginx, не касаясь приложения. - person Ben; 07.10.2010

Ответил на вопрос об обновлении в разделе Обработка запросов на обновление HTTP/1.1 в CherryPy. Не уверен, относится ли это к этому или нет.

person fumanchu    schedule 07.10.2010
comment
Этот вопрос носит более общий характер и, вероятно, лучше всего решается с помощью промежуточного программного обеспечения WSGI. Для действительно низкоуровневой обработки сокетов (как в связанном вопросе) (связанный) ответ, безусловно, является лучшим (единственным?) подходом. Спасибо. - person user464164; 07.10.2010