从服务器的角度来看,Go web应用程序是如何运行的?

从服务器的角度来看,Go web应用程序是如何运行的?,go,Go,我遵循了如何使用Go的说明,我能够让一个应用程序运行良好 但有一件事让我感到困惑,当你运行应用程序(./8.out)时,终端会坐在那里监听端口8080,直到有人访问一个页面 终端是否需要一直熬夜才能运行web应用程序?应用程序的行为是否类似于apache?是否需要在此应用程序旁边运行apache?现在,在服务器环境中进行设置对我来说似乎很困惑,因为我不知道最好的方法是什么 已编辑 谢谢你的回复。因此,如果Go应用程序本质上与apache类似,是否有一个预制的Go服务器应用程序具有apache的详

我遵循了如何使用Go的说明,我能够让一个应用程序运行良好

但有一件事让我感到困惑,当你运行应用程序(./8.out)时,终端会坐在那里监听端口8080,直到有人访问一个页面

终端是否需要一直熬夜才能运行web应用程序?应用程序的行为是否类似于apache?是否需要在此应用程序旁边运行apache?现在,在服务器环境中进行设置对我来说似乎很困惑,因为我不知道最好的方法是什么

已编辑

谢谢你的回复。因此,如果Go应用程序本质上与apache类似,是否有一个预制的Go服务器应用程序具有apache的详细性?

我想你的问题是
运行Go web应用程序的好方法是什么?

只要您坚持终端会话,在终端中运行它就可以了。像
screen
这样的程序可以做到这一点

另一种方法是利用操作系统的启动脚本。例如,大多数Linux系统允许您向/etc/init.d添加脚本,从而生成web应用程序。apache就是这样开始的

在我看来,最好的方法是使用像
monit
daemontools
这样的软件。在进行一些初始配置之后,它们会持续监视web应用程序,并在应用程序出现故障时重新启动应用程序。这就是大多数生产环境的操作方式

如果希望在同一台服务器上运行多个Go web应用程序,可以使用apache或lighttpd作为网关,并使用fastcgi或scgi等协议来服务请求

终端是否需要一直熬夜才能运行web应用程序? 如果您从终端正常运行,则是。更好的选择是在后台运行它,方法是在命令行末尾添加一个“&”(好),从init启动它(更好),或者使用类似于(最好)的进程监视器

应用程序的行为是否类似于apache? 基本上,是的。它侦听HTTP请求并响应它们

是否需要在此应用程序旁边运行apache? 不,Go应用程序可以自己处理请求。有些人在前端运行apache或其他服务器(监听端口80),并使用mod_代理将请求转发给他们的应用程序(监听端口8080或其他端口)

这样做的一个好处是,您可以在自己的进程中运行多个不同的应用程序服务器。例如,您可以将RubyonRails用于主站点,并使用Go程序处理API请求

另一个优点是,您的程序不需要以root用户身份启动,就可以侦听端口80。您可以作为普通用户运行,而不必担心在打开连接后会丢失权限

是否有一个预制的Go服务器应用程序具有apache的详细性? 据我所知,没有一款go服务器可以与Apache相媲美。围棋很新,可能需要一段时间来做类似的事情


不过,有一些框架使使用内置HTTP服务器编写web应用程序变得更容易。我唯一熟悉的是。

但有一件事让我感到困惑,那就是,当你运行应用程序(/8.out)时,终端会坐在那里,监听端口8080,直到有人访问一个页面。

在Linux中,每个进程都有一个父进程。在终端中运行命令时,例如
/8.out
find
,将生成一个新进程,它是shells进程的子进程。当在行尾(
/8.out&
)没有使用符号的情况下运行shell时,shell将等待进程完成,然后再允许您输入更多文本。如果它是用符号运行的,那么当进程在后台运行时,您可以继续使用shell。但是,当您关闭shell时,您会注意到服务器进程也会关闭。这是因为当您终止父级时,其所有子级也将终止

终端是否需要一直熬夜才能运行web应用程序?

如果您希望进程在没有终端的情况下运行,并且您可能不希望这样做,但如果您确实希望这样做:

jobs
disown %jobid
第一个命令提供shell的子进程列表,第二个命令将%jobid的父进程更改为init。Init是所有进程的父进程

应用程序的行为是否与apache类似?

apache和此应用程序都侦听操作系统提供的端口,但除此之外,它们是不同的

是否需要在此应用程序旁边运行apache?

不,此应用程序完全独立于Apache工作。Apache绝不是神奇的(?),基本上它只是在一个端口上监听,就像这个应用程序一样

现在在服务器环境中设置此选项对我来说似乎很困惑,因为我不知道最好的方法是什么。

这似乎令人困惑。编写web服务器/服务非常困难,而且这绝不是一个要部署在
localhost
之外的示例

感谢您的回复。因此,如果Go应用程序本质上与apache类似,是否有一个预制的Go服务器应用程序具有apache的详细性?


据我所知,目前还没有用Go编写的生产质量服务器,Go是一种非常新的语言。

非常感谢您对营销人员的帮助。这是一个很好的信息。谢谢你给西莫斯提供的额外信息。我很高兴听到这被认为是“非常困难的”,因为有时我想知道我是否是唯一一个不能解决这些问题的程序员,哈哈。@Metropolis相信我,你不是唯一一个。有很多关于这个主题的书是有原因的。事情不应该变得更容易而不是更难吗?哈哈……好像