为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
跃然一笑 2021-12-20 16:23:18
我有一个来自 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) 什么是标准的最佳实践?太感谢了!
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

好吧,你可以在 go 中进行热交换,但我真的不想这样做,除非真的有必要,因为添加的复杂性不可忽略(我不是在谈论代码)。

您可以使用一种代理,该代理将位于程序前面并在您的二进制文件更改时进行优雅的交换:原则是将二进制文件放在一个端口上,将代理放在另一个端口上。当一个新的二进制文件准备好时,你在另一个端口上运行它,并使代理重定向到新的端口,然后优雅地关闭旧的。

在 Go 中有一个工具,我不记得它的名字了……

编辑:不是我想到的那个,而是近距离通话https://github.com/rcrowley/goagain

个人建议:为此使用反向代理,这样做要简单得多。我的个人设置是使用 h2o 终止 SSL、HTTP2 等,并将请求发送到在后台运行的各种网站。不仅是 Go 的,还有 PHP 的,Gitlab 实例等。它更灵活,代理的性能损失很小......


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号