Как действительно Идут функция веб-приложений с точки зрения сервера?

Я следовал за направлениями о том, как создать использование веб-приложений, Идут, и я смог получить работающее отлично приложение.

Одна вещь я смущен тем, хотя при выполнении приложения (./8.out), терминал, будет находиться там и слушать на порте 8080, пока кто-то не получит доступ к странице.

Терминал должен не лечь спать все время для выполнения веб-приложения? Приложение действует как апач? Апач должен быть выполнен рядом с этим приложением? Установка этого на серверной среде кажется очень сбивающей с толку меня прямо сейчас, потому что я не понимаю, каково лучший способ сделать это.

ОТРЕДАКТИРОВАННЫЙ
Спасибо за ответы. Таким образом, если приложение Движения по существу действует как апач, есть ли предварительно сделанное приложение для сервера Движения, которое имеет подробность апача?

8
задан Metropolis 24 January 2013 в 15:56
поделиться

3 ответа

Должен ли терминал постоянно оставаться в рабочем состоянии для запуска веб-приложения?

Если вы запустите его нормально с терминала, то да. Лучше запустить его в фоновом режиме, добавив «&» в конец командной строки (хорошо), запустить его из init (лучше) или использовать монитор процесса, например supervise (лучше) .

Приложение работает как 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
ответ дан 5 December 2019 в 11:22
поделиться

Я думаю, ваш вопрос: как лучше запустить веб-приложение Go?

Запускать его в терминале нормально, если вы сохраняете свои терминальные сеансы. Такие программы, как screen , могут это сделать.

Другой способ - использовать сценарии запуска вашей операционной системы. Например, большинство систем Linux позволяют добавлять сценарии в /etc/init.d, которые порождают веб-приложение. Так запускается apache.

На мой взгляд, лучший способ - использовать такие программы, как monit или daemontools . После некоторой начальной настройки они постоянно контролируют веб-приложение и перезапускают приложение, если оно перестает работать. Так работает большинство производственных сред.

Если вы хотите запускать несколько веб-приложений Go на одном сервере, вы можете использовать apache или lighttpd в качестве шлюза и использовать протокол, такой как fastcgi или scgi, для обслуживания запросов.

3
ответ дан 5 December 2019 в 11:22
поделиться

Однако меня смущает одна вещь: когда вы запускаете приложение (./ 8.out), терминал будет сидеть и слушать порт 8080, пока кто-нибудь не получит доступ к странице.

В Linux у каждого процесса есть родитель. Когда вы запускаете команду в терминале, например ./ 8.out или find , создается новый процесс, который является потомком процесса оболочки. Когда он запускается без амперсанда в конце строки ( ./ 8.out & ), оболочка ожидает завершения процесса, прежде чем позволит вам ввести следующий текст. Если он запускается с амперсандом, он позволяет вам продолжать работу с оболочкой, пока процесс выполняется в фоновом режиме. Однако, когда вы закроете оболочку, вы заметите, что серверный процесс также завершает свою работу. Это связано с тем, что, когда вы завершаете родительский элемент, все его дочерние элементы также завершаются.

Должен ли терминал постоянно оставаться в рабочем состоянии для запуска веб-приложения?

Если вы хотите, чтобы процесс запускался без терминала, и вы, вероятно, этого не хотите, но если вы действительно это сделали:

jobs
disown %jobid

Первая команда дает вам список дочерних процессов оболочки, вторая команда изменяет родительский процесс% jobid на init. Init - это процесс, который является родительским для всех процессов.

Действует ли приложение как apache?

И apache, и это приложение прослушивают порт, предоставляемый операционной системой, но помимо этого они не похожи.

Нужно ли запускать apache рядом с этим приложением?

Нет, это приложение работает полностью отдельно от Apache. Apache никоим образом не волшебный (?), На базовом уровне он просто слушает порт, как это делает это приложение.

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

Это должно показаться запутанным. Написание веб-серверов / сервисов очень сложно, и это ни в коем случае не пример, который предназначен для развертывания за пределами localhost .

Спасибо за ответы. Итак, если приложение Go, по сути, действует как apache, существует ли готовое? Серверное приложение Go с многословностью apache?

На Go нет серверов производственного качества, о которых я знаю, на данный момент Go - это очень новый язык.

4
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: