Как 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 для обслуживания запросов.