在单个 VM 中为两个用 Google Go 编写的网站提供服务

我有一个来自 Digital Ocean 的虚拟机。它目前有两个链接到 VM 的域。我不使用任何其他 Web 服务器,而是使用 Golang 的内置 http 模块。性能方面我喜欢它,我觉得我可以完全控制它。


目前我正在使用一个内置多个网站的 Go 程序。


http.HandleFunc("test.com/", serveTest)

http.HandleFunc("123.com/", serve123)

http.HandleFunc("/", serve123)

由于它们是网站,Go 程序为此使用端口 80。问题是当我只尝试更新 1 个网站时,我必须重新编译整个内容,因为它们是用相同的代码编写的。


1) 有没有办法让它只用 Golang 热插拔(没有 Nginx 或 Apache) 2) 什么是标准的最佳实践?


太感谢了!


跃然一笑
浏览 227回答 1
1回答

繁花不似锦

好吧,你可以在 go 中进行热交换,但我真的不想这样做,除非真的有必要,因为添加的复杂性不可忽略(我不是在谈论代码)。您可以使用一种代理,该代理将位于程序前面并在您的二进制文件更改时进行优雅的交换:原则是将二进制文件放在一个端口上,将代理放在另一个端口上。当一个新的二进制文件准备好时,你在另一个端口上运行它,并使代理重定向到新的端口,然后优雅地关闭旧的。在 Go 中有一个工具,我不记得它的名字了……编辑:不是我想到的那个,而是近距离通话https://github.com/rcrowley/goagain个人建议:为此使用反向代理,这样做要简单得多。我的个人设置是使用 h2o 终止 SSL、HTTP2 等,并将请求发送到在后台运行的各种网站。不仅是 Go 的,还有 PHP 的,Gitlab 实例等。它更灵活,代理的性能损失很小......
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go