2015-07-15 2 views
3

Для высокопроизводительного приложения, доступного через веб-интерфейс, было бы целесообразно реализовать/повторно использовать какой-либо http-сервер или пойти с fastcgi? Я был убежден, что fcgi будет правильным выбором, но я столкнулся с https://ef.gy/fastcgi-is-pointless, и теперь я не уверен.FastCGI или HTTP-сервер для демонстратора C++ за прокси nginx

HTTP не позволяет обрабатывать несколько сеансов за один раз, но это может быть решено с помощью нереста нескольких деамонов и пусть nginx действует как балансир. Но это, вероятно, будет намного легче протестировать.

С другой стороны, fcgi похоже, что все необходимые высокопроизводительные части уже установлены (мультиплексирование запросов в один процесс, поэтому проще реализовать кеш, ...).

Есть ли у HTTP любой преимущество перед FastCGI в стороне от того, чтобы легче отлаживать?

ПРИМЕЧАНИЕ. Безопасность не является проблемой, поскольку либо fcgi, либо http будет работать за прокси-сервером nginx.

+0

Почему бы вам не пропустить сервер NGINX вообще и реализовать свое решение с использованием рамки Restbed? Раскрытие информации, я автор. https://github.com/corvusoft/restbed – Corvusoft

+0

Как и nginx для обслуживания статического контента. К restbed: Хотя я должен признать, что это выглядит действительно интересно, я не так увлекаюсь условиями лицензирования. Мне всегда нравилось больше лицензий для разработчика, а не для каждого сайта. Но в стороне от этого, он выглядит довольно круто и, вероятно, иногда будет пытаться попробовать. Один вопрос. Я ожидаю, что 'Session :: wait_for' можно использовать для приостановки выполнения текущего метода и разрешения обработки других запросов. Но можно как-то ждать переменной условия? Время ожидания, к сожалению, не будет известно заранее. – Paladin

+0

Правильный wait_for все равно позволит другим запросам действовать неблокирующимся способом. Что касается вопроса с переменной состояния, в настоящее время я работаю над следующей функцией: Session :: wait_until (триггер, обратный вызов (сеанс, будущее)). – Corvusoft

ответ

6

Действуя как HTTP-сервер, вы заставите вас реализовать некоторые вещи, которые не связаны с бизнес-логикой вашего приложения. Это включает в себя, но не ограничиваясь: keep-alive, chunked encodings, данные декодирования форм и многие другие маленькие или большие вещи. Я бы предпочел придерживаться fastcgi, поскольку для этого требуется меньше знаний о протоколе транспортного уровня.

1

С другой стороны, что делает ваш C++ приложение специализированный Web-сервер (например, с libonion или Wt библиотеки, или даже POCO) сделало бы довольно легко отлаживать. Оба они могут использоваться в сеансе, и они будут обрабатывать подробные сведения (кеширование, кодирование с чередованием, транспортное сжатие и т. Д.). Я предполагаю (но не знаю), что их производительность HTTP может быть немного ниже (обе библиотеки, вероятно, не так оптимизированы, как, например, nginx). И они, вероятно, лучше всего подходят нескольким десяткам (или, возможно, сотням) одновременно активных пользователей, а не тысячам (но я не знаю и никогда не использовал их с таким большим количеством пользователей ...).

И, возможно, вы могли бы иметь реальные случаи пользователей для этого (это действительно зависит от того, что приложение на самом деле делает, и если у вас есть пользователи, работающие Linux или другие системы POSIX ...)

Кстати, если вы знаете, (или хотите учиться) Ocaml, вы даже можете использовать ocsigen; если вы знаете Scheme или какой-либо другой Lisp, рассмотрите HOP; если вы хотите изучить новый язык, рассмотрите OPA (или, может быть, HAXE). Все эти звери позволяют легко смешать серверные и браузерные вычисления.

+0

libonion только для Linux? похоже, что из ссылки .. Кроме этого, это выглядит круто. Что касается Wt, я не знаю, я попробовал это и узнал, что вся концепция веб-подобных-gui-приложений не очень мне подходит. Не говорю, что Wt плох, это просто я .. – Paladin