Есть ли разница в скорости между WSGI и FCGI? - PullRequest
35 голосов
/ 17 ноября 2009

Из Интернета я выяснил, что WSGI - это CGI для веб-разработки и фреймворков на Python. FCGI, кажется, является более общим шлюзом для множества языков. Не знаю разницу в производительности между этими двумя ссылками на языки Python и C /++.

Ответы [ 2 ]

71 голосов
/ 17 ноября 2009

Правильно, WSGI - это определение программного API для Python, а FASTCGI - это определение протокола проводной сокета, не зависящего от языка. Фактически они находятся на разных уровнях, а WSGI - более высокий уровень. Другими словами, можно реализовать WSGI поверх чего-то, что случилось с использованием FASTCGI для связи с веб-сервером, но не наоборот.

В общем, FASTCGI, являющийся протоколом проводного сокета, означает, что для его использования всегда требуется какой-то программный интерфейс сверху. Для Python одним из таких вариантов является WSGI. Поскольку FASTCGI - это всего лишь средство для достижения цели, в этом случае нельзя сравнивать его производительность с WSGI, поскольку WSGI - не сопоставимый протокол проводного сокета, а пользователь самого FASTCGI.

Можно попытаться сравнить производительность различных языковых интерфейсов поверх FASTCGI, но в целом это само по себе совершенно бессмысленно, поскольку нижний сетевой уровень и обработка запросов к серверу не являются узким местом. Вместо этого ваш код приложения и база данных будут.

25 голосов
/ 17 ноября 2009

Это две разные вещи. WSGI - это специальный Python-интерфейс для написания веб-приложений. Существуют оболочки для любого протокола веб-сервера, обеспечивающие интерфейс WSGI. FastGCI (FCGI) является одним из таких протоколов веб-сервера. Итак, WSGI - это уровень абстракции, а CGI / FastCGI / mod_python - это то, как реальные веб-серверы взаимодействуют с приложением. Некоторый код должен переводить собственный интерфейс в WSGI (в wsgiref есть модуль CGI, для FastCGI и т. Д. flup). Существует также mod_wsgi для Apache, который выполняет перевод непосредственно в модуле Apache, так что вам не нужна оболочка Python.

...