在 Go 中处理并发的 http 请求

Handle concurrent http requests in Go

我想重新编写一个具有大量并发用户的应用程序。想象一下有数百万用户通过 Websocket 连接的聊天应用程序。过去,我微调 Python+Django+UWSGI 和今天可用的架构。现在我看到连接速度慢和超时等等。

我决定使用 Go 语言并放弃 Python 我的问题是我找不到像 UWSGI 这样的东西而且我知道 Go 具有内置的并发功能。这意味着 Go 服务器不需要像 UWSGI 这样的东西并且可以处理并发请求?或者go中提到的并发只是简单的I/O?

我需要最大的性能和并发性。这个问题我理解的好吗?这两个是等价的?去可以帮我吗?我们不需要像 UWSGI 这样的东西,而 Go 的核心功能在这个问题上可以更快更好地工作吗?

你应该看看 Go 频道。 Go 通道与 Go 例程相结合可以轻松地在同一进程中扩展并发性。与 Java 线程相比,Go 例程非常高效并且上下文切换更少。仅 4kb 内存消耗。在 Go 中你不共享内存,而是通过将它们推送到通道上来传达状态,这导致没有上下文切换来访问共享内存。

Go 中的通道以类似于您使用 Apache Kafka 或 RabbitMq 等队列系统的方式工作。

我在下面的博文中写了一个广泛的例子。

https://marcofranssen.nl/concurrency-in-go

如果你真的是新手,我也可以建议看看我的其他文章。

https://marcofranssen.nl/categories/golang

完成快速入门教程后,从旧到新阅读它们以熟悉这门语言。

一旦了解了 Go 通道,您就知道如何有效地实现内部逻辑。对于面向外部的 API,我会选择 https://grpc.io/,它允许在 TCP 级别上进行通信。它允许在两个方向上进行流式传输。