是否有办法在单个端口(例如80)上处理多个Go Web应用程序的侦听。我知道ServeMux能够监听不同的传入主机名,但是在这种方法中,它们必须在同一个程序中处理,因此必须使用相同的二进制文件。
最好的方法是监听主机名:80在一个二进制文件中,然后将请求/响应编写器发送到另一个相应的二进制文件?我会使用"os/exec"
吗?如何将Request
和ResponseWriter
参数传递给此外部二进制文件?提前谢谢!
编辑:
不同二进制来源的goroutine是否可以访问彼此的频道?这将是一种很酷的方式。
答案 0 :(得分:5)
执行此操作的常用方法是使用反向代理,根据请求中的主机名将请求定向到相关的应用服务器(通常在不同的端口或不同的计算机上运行)。
一种常见的方法是使用Apache,但是如果你想从Go开始,ReverseProxy
type中的net/http/httputil
package应该有帮助。
httputil.NewSingleHostReverseProxy(baseurl)
将为您提供一个HTTP处理程序,将请求代理到另一个网站并返回结果。因此,您可以通过多路复用HTTP处理程序实现前端,该处理程序根据请求的主机名将请求定向到多个ReverseProxy
处理程序之一。
如果您需要比NewSingleHostReverseProxy
提供的更复杂的路由,则可以在创建代理处理程序时使用自定义Director
功能。