У нас есть параллельные проблемы в Python. Эти серверы WSGI просто не работают так замечательно. Я смотрю вокруг, не получаю ничего, как Golang, написанный WSGI-сервер с его goroutines.Почему не реализация golang WSGI
Любые причины?
У нас есть параллельные проблемы в Python. Эти серверы WSGI просто не работают так замечательно. Я смотрю вокруг, не получаю ничего, как Golang, написанный WSGI-сервер с его goroutines.Почему не реализация golang WSGI
Любые причины?
WSGI
протокол специфичен для Python. С Go у вас есть три варианта (на самом деле, четыре, но обычная CGI
должны якобы быть не считается для умеренной до высокой нагрузки установок):
Built-in HTTP
serving facilities стандартной библиотеки Go содержит.
В этом случае ваше приложение является автономным сервером. Это может быть простая установка, но она может иметь следующие проблемы:
goagain
).То же, что и выше, но за реверсом HTTP
прокси-сервер в виде веб-сервера.
В основном устраняет проблемы автономного варианта, но все еще имеет накладные расходы на полный оборот HTTP
трафика взад и вперед.
FastCGI
через подходящий веб-сервер. Nginx
и Apache
(и многие другие) в порядке с этим. FCGI
клиент осуществление available in the Go standard library.
В дополнение к отсутствию проблем с автономной настройкой, реализуется более эффективный протокол обмена данными. Еще один бонус заключается в том, что ваш сервер Go может взаимодействовать с интерфейсным веб-сервером, используя Unix-каналы, которые имеют меньшую стоимость передачи, чем TCP-сокеты, задействованные в обратном HTTP
прокси-варианте.
Так что, если ваша установка в настоящее время использует WSGI
, я бы сказал, что идти с FCGI
.
++ для полезного ответа, который выходит за рамки поставленного вопроса. – twotwotwo
Вы основывали этот совет на тестах? Я предполагаю, что встроенный подход (через goagain) будет легко превосходить FastCGI, но я предпочел бы видеть цифры до принятия решения. На одном сайте Go HTTP является лидером по одному конкретному эталону (http://www.techempower.com/benchmarks/), недавно опередив предложения JVM. –
@ Rick-777, нет, к сожалению, у меня нет жестких данных, чтобы поддержать мои претензии. Мое замечание о более эффективном протоколе обмена данными заключалось в сравнении «FastCGI» с обратным прокси-сервером «HTTP» - я согласен с вами в том, что автономный сервер должен быть самым быстрым из всех. – kostix
Хотя Go может не поддерживать протокол WSGI
как таковой, uWSGI, который является довольно популярным сервером WSGI
has support for Go. В настоящее время похоже, что поддержка ограничена и не обновляется часто, но это может быть что-то, что нужно изучить.
По умолчанию плагин uWSGI Go поддерживает
http.DefaultServeMux
обработчик, так что, если ваше приложение уже на его основе, запустив его в uWSGI должен быть предельно простым.
Следующий пример заимствован из Документов uWSGI:
package main
import (
"uwsgi"
"net/http"
"fmt"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Hello, World!</h1>")
}
func main() {
http.HandleFunc("/hello/", helloHandler)
uwsgi.Run()
}
uwsgi - это не то, во что вы верите. Я удивлен, что люди поддержали это. uwsgi - многоцелевой инструмент для запуска нескольких языков сценариев или скомпилированных языков. Он имеет мало общего с вопросом. Пример, который вы опубликовали, будет запускать программу go, используя uwsgi. Поэтому вместо 'http.ListenAndServe()' у вас есть uwsgi.Run(). uwsgi - это как адаптер, который позволяет подключать разные языки. WSGI - это протокол. uwsgi использует только буквы «wsgi». Это как сказать, что Бананы и Наны - то же самое, и если вам нужна няня, вы должны купить банан. Не смешивается –
@dalu Перечитывая вопрос сейчас через 1,5 года, я вижу, что я неправильно понял вопрос. Я знаю, что такое uwsgi, и теперь я вижу, что OP действительно спрашивал, есть ли сервер WSGI, написанный в Go (который будет запускать приложения WSGI Python). – korylprince
Существует сервер Go WSGI здесь:
http://bitbucket.org/classroomsystems/wsgi
Однако его намерение состоит в том, чтобы не запускать серверы Python быстрее - он запускает один интерпретатор CPython с GIL. Я написал это, чтобы облегчить переход для моих клиентов, пока наш продукт перемещается с Python на Go.
WSGI - это спецификация для веб-серверов Python. –
Просто не могу написать веб-сервер Python с Golang? – fengsp
Что не работает для вас? Вы спрашиваете, почему сервер Go работает лучше, чем Python? – jwalker