在Go中处理并发http请求



我想重新编写一个具有大量并发用户的应用程序。想象一下,一个聊天应用程序通过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级别上进行通信。它允许在两个方向上进行流实现。

最新更新