Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《在私有的IIS 服务器上能否托管 Golang REST Web 应用程序?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!
我想使用 GoLang 创建一个在 IIS(7、8 或 10)或 Tomcat 7.0 上运行的 Web 服务。我们有多个环境,每个环境都有多个服务器,都是 Windows 2008 R2、2012 或 2016。所有服务器都是私有的 (10.x)。我的目标是向同时使用 IIS 和 Tomcat 的 COTS 产品添加一些 REST 服务。我宁愿避免将 nginx 或其他东西粘贴到任一服务器上,以免损害 COTS 产品或让他们的技术支持人员不接听电话。再次强调......服务器只能通过公司 VPN 访问,并且不面向公共互联网。
哪种服务器可以提供最简单的方法来让某些东西正常工作 - Tomcat 还是 IIS?
解决方案
这与 Go 无关,但我能想到至少有两种解决方案:
HTTP 请求的反向代理。
编写一个普通的 Go 服务器,通过 HTTP 处理请求。
也许可以使用
golang.org/x/sys/windows/svc
将其转换为正确的 Windows 服务。部署它。
如果要托管在运行 IIS 的同一台计算机上,则可以让它仅侦听
localhost
。请注意,它需要一个专用的 TCP 端口来侦听,并且您需要使您的服务器能够在这方面以某种方式进行配置。- 设置 reverse proxying in your IIS,以便它将来自您想要的任何网址(部分)的请求转发到 Go 服务器。
使用 FastCGI。
Go 支持通过 FastCGI 处理请求 协议by means of its standard library, 和IIS suports FastCGI workers。
因此可以(重新)编写 Go 服务器以使用 FastCGI 而不是 HTTP,然后通过此协议将其挂接到 IIS。
在我看来,这些解决方案的优点和缺点是:
开发人员更熟悉通过纯 HTTP 提供服务,并且 使服务器更加“便携”——从某种意义上说,如果/当您需要它时,将更容易更改其部署方案。 直接将其提供给互联网的权利。
相反,使用 FastCGI,您始终需要一个 FastCGI 主机作为“中间件”。
有传言称 HTTP 代码在方面进行了更精细的调整 性能优于 FastCGI。
不过,这只会对相当硬核的负载造成影响。
FastCGI over HTTP 的一个可能的优点是它可以 通过管道而不是 TCP 提供服务。例如,您可能 通过命名管道提供服务,因为它受 IIS 的 FastCGI 模块支持,并且存在 3rd-party packages for Go implementing support for them (甚至包括来自 Microsoft® 的一项)。
这样做的好处是,管道被认为会产生较少的数据传输开销(基本上,它只是在属于两个进程的内核缓冲区之间铲入字节,而不是将它们推送到整个 TCP/IP 堆栈),并且使用管道使您无需将 TCP 端口专用于 Go 服务器。
不过,我对这种设置及其性能权衡没有个人经验。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在私有的IIS 服务器上能否托管 Golang REST Web 应用程序?》文章吧,也可关注编程网公众号了解相关技术文章。