Как Go web apps функционирует с точки зрения сервера?
я следовал инструкциям о том, как создание веб-приложений С помощью Go, и я смог получить приложение, работающее отлично.
одна вещь, которую я смущен, хотя, когда вы запускаете приложение (./8.out), терминал будет сидеть там и слушать порт 8080, пока кто-то не получит доступ к странице.
в терминале должны оставаться все время, чтобы запустить веб-приложение? Действует ли приложение как apache? Должен ли apache запускаться следующим к этому приложению? Настройка этого в серверной среде кажется мне очень запутанной, потому что я не понимаю, как это лучше всего сделать.
редактировать
Спасибо за ответы. Итак, если приложение Go по существу действует как apache, есть ли готовое серверное приложение Go, которое имеет многословность apache?
3 ответов
в терминале должны оставаться все время, чтобы запустить веб-приложение?
Если вы запускаете его нормально с терминала, то да. Лучшие варианты-запустить его в фоновом режиме, добавив " & " в конец командной строки (хорошо), запустить его из init (лучше) или использовать монитор процессов, например надзор (лучше).
действует ли приложение как apache?
по сути, да. Он прослушивает HTTP-запросы и отвечает на их.
нужно ли запускать apache рядом с этим приложением?
нет, приложение Go может обрабатывать запросы самостоятельно. Некоторые люди запускают apache или какой-либо другой сервер на переднем конце (прослушивание порта 80) и пересылают запросы своему приложению (прослушивание порта 8080 или другого порта) с помощью mod_proxy.
одним из преимуществ этого является то, что вы можете запускать несколько разных серверов приложений в своем собственном процессе. Например, вы можете использовать Ruby on Rails для основного сайта и обработки запросов API с помощью программы Go.
еще одно преимущество заключается в том, что ваша программа не должна запускаться как root для прослушивания порта 80. Вы можете просто работать как обычный пользователь, не беспокоясь о снижении привилегий после открытия соединения.
есть ли готовое серверное приложение Go, которое имеет многословность apache?
насколько я знаю, нет серверов go, которые могли бы сравниться с Apache. Go достаточно новый, что он, вероятно, будет быть время для чего-то подобного.
есть некоторые фреймворки, которые облегчают написание веб-приложений с помощью встроенного HTTP-сервера. Только я знакома с web.go.
одна вещь, которую я смущен, хотя, когда вы запускаете приложение (./8.out), терминал будет сидеть там и слушать порт 8080, пока кто-то не получит доступ к странице.
в Linux каждый процесс имеет одного родителя. При выполнении команды в терминале, например,./8.out
или find
, новый процесс порождается, который является дочерним процессом оболочек. Когда он запускается без амперсанда в конце строки (./8.out &
), оболочка ожидает завершения процесса прежде чем он позволит вам ввести дополнительный текст. Если он запускается с амперсандом, он позволяет продолжить работу с оболочкой, пока процесс выполняется в фоновом режиме. Однако при закрытии оболочки вы заметите, что серверный процесс также завершает работу. Это происходит потому, что при прекращении родительского, все его потомки также прекращаются.
в терминале должны оставаться все время, чтобы запустить веб-приложение?
если вы хотите запустить процесс без терминала, и вы, вероятно, не хотите этого, но если вы действительно сделали:
jobs
disown %jobid
первая команда дает вам список дочерних процессов оболочки, вторая команда изменяет родительский процесс %jobid на init. Init-это процесс, который является родительским для всех процессов.
действует ли приложение как apache?
и apache, и это приложение прослушивают порт, предоставляемый операционной системой, но помимо этого они несходный.
нужно ли запускать apache рядом с этим приложением?
нет, это приложение работает полностью отдельно от Apache. Apache никоим образом не волшебный (?), на базовом уровне это просто прослушивание порта,как и это приложение.
настройки на серверной среде кажется очень запутанным, потому что я не понимаю, что лучший способ сделать это.
это должно показаться запутанным. Написание веб серверы / службы очень сложны, и это ни в коем случае не пример, который предназначен для развертывания за пределами localhost
.
Спасибо за ответы. Итак, если приложение Go по существу действует как apache, есть ли предварительная версия ?Go server приложение, которое имеет многословность apache?
в Go нет серверов качества производства, о которых я знаю, на данный момент Go-это очень новый язык.
Я думаю, что ваш вопрос what is a good way to run a Go web application?
запуск его в терминале в порядке, пока вы сохраняете свои сеансы терминала. Такие программы, как screen
можете сделать это.
другой способ-использовать сценарии запуска вашей операционной системы. Большинство систем Linux, например, позволяют добавлять скрипты в /etc / init.d которые порождают веб-приложение. Вот как начинается apache.
лучший способ, на мой взгляд, использовать программное обеспечение, как monit
или daemontools
. После некоторых начальная конфигурация, они постоянно контролируют веб-приложение и перезапускает приложение, если оно идет вниз. Так работает большинство производственных сред.
если вы хотите запустить несколько веб-приложений Go на одном сервере, вы можете использовать apache или lighttpd в качестве шлюза и использовать протокол fastcgi или scgi для обслуживания запросов.