我们在Python中有并发问题.这些WSGI服务器工作起来并不那么出色.我四处看看,找不到任何像Golang编写的WSGI服务器及其Goroutines一样的东西.
有什么原因吗?
我们在Python中有并发问题.这些WSGI服务器工作起来并不那么出色.我四处看看,找不到任何像Golang编写的WSGI服务器及其Goroutines一样的东西.
有什么原因吗?
WSGI
协议特定于Python?对于GO,您有三个选项(实际上是四个,但对于中到高负载设置,应该不考虑纯CGI
):
围棋标准库的Built-in HTTP
serving facilities.
在这种情况下,你的应用是一个独立的服务器.这可能是最简单的设置,但可能存在以下问题:
goagain
).与上面相同,但在Web服务器形式的反向HTTP
代理之后.
在很大程度上消除了独立变体的问题,但仍有来回传递全部HTTP
个流量的开销.
FastCGI
通过合适的网络服务器.Nginx
和Apache
(以及许多其他的)可以接受这一点.FCGI
客户端实现是available in the Go standard library.
除了不存在独立设置的问题外,还实施了更高效的数据交换协议.另一个好处是,您的Go服务器可以使用Unix管道与前端Web服务器通信,Unix管道比反向HTTP
代理变体中涉及的TCP套接字具有更低的传输成本.
所以,如果你的设置目前使用WSGI
,我会说使用FCGI
.
¹ As several commenters pointed out, strictly speaking, this is not quite correct: WSGI allows decoupling a web-serving application written in any language from a web server or an application server (connected, in turn, to a web server).
In order for this to happen, both parties must speak the same protocol, WSGI, which is language-agnostic.
Still, it appears that most software not written in Python would either use HTTP or FastCGI to communicate with the front-end server.
Updated in 2020-11-19
正如Andrea Citrolo在他们的 comments 中正确地指出的那样,使用当前无处不在的容器化,当您部署了同一服务的多个副本,并且需要在它们之上进行负载平衡时,使用纯HTTP通常是唯一的方法.
我还想补充一点,如果您打算公开您在Go to the Internet中编写的程序(这很好),您应该阅读this.