我想在Go中运行一个简单的网络服务器,做一些基本授权并路由到多个应用程序。
是否可以将Web服务器作为独立可执行文件运行并将响应编写器和http请求传递给其他可执行文件?
这个想法是希望可以独立于网络服务器编译和部署app二进制文件。
答案 0 :(得分:3)
正在运行的应用程序的内存区域是孤立的:一个进程不能只读取或写入另一个应用程序的内存(Wikipedia: Process isolation)。
所以只是传递响应编写器和http请求并不是那么容易。即使您要实现它(例如将它们序列化为二进制或文本数据,以某种方式发送/传递它们,并在另一侧重构它们)在后台提供HTTP请求不仅仅是与{{3}进行交互。 }和ResponseWriter
对象:它涉及读取和写入底层TCP连接......所以你还必须通过"传递" TCP连接或在真正的HTTP客户端和转发的应用程序之间建立桥梁。
另一种选择是在执行身份验证和路由逻辑后将重定向发送回客户端(Request
)。使用此解决方案,您可以在应用程序中实现身份验证和某些路由逻辑,但是由于进一步的请求将直接发送到指定的主机,您将失去进一步的路由可能性。
基本上你试图创建的是HTTP 3xx
status codes的功能,它有很多实现。鉴于良好的代理服务器的复杂性,重现一个代理服务器是不可行的。
我建议使用现有的代理服务器或" refactor"你的架构,以避免这种细分。