performance - Go 中异步 TCP 服务器的正确结构是什么?

标签 performance go tcp asyncsocket tcpserver

我有一个客户端发送大约 50 万个请求(消息)/分钟。每条消息大约为 200 字节到 2KB。每条消息都将保存在数据库中(例如 Couchbase)。

根据核心、端口、连接和 goroutines 来构建 Go TCP 服务器以处理此负载的正确方法是什么?

最佳答案

正如 JimB 所提到的,TCP 服务器应该不难建立并开始针对您的需求进行基准测试。一个简单的布局是等待传入的 TCP 连接,然后执行一个 go 例程来处理它。在那个 goroutine 中,你可以放置任何你想要的阻塞代码,在本例中是写入数据库。这是一个简单示例的链接:

Simple example

一旦你开始工作,如果它不符合你的性能标准,你可以让它更复杂。这是一个使用工作池每分钟处理 1M HTTP 请求的很好的示例。

More sophisticated example

关于performance - Go 中异步 TCP 服务器的正确结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052664/

相关文章:

javascript - 计算在javascript中循环内花费的时间

javascript - 为什么绑定(bind)比闭包慢?

string - 将一个int转成hex然后补0得到一个固定长度的String

go - 无法将实现 Foo 接口(interface)的结构 slice 传递给需要 []Foo 的函数

flutter - 如何修复 flutter 中的 'SocketException: OS Error: Connection timed out, errno = 110, address = 192.168.5.10, port = 49590' 错误

JavaScript 嵌入每天都会变化的视频

javascript - 使用 KineticJS 提高动画性能

go - 如何为 go 本地包提供版本号以在 `go.mod` 文件中提及

c++ - Windows C++ 间歇性套接字断开连接

C# TcpClient发送世界信息异常时关闭Server上的连接