gpt4 book ai didi

performance - go rpc、http 或 websockets,这是将许多小块数据从一个服务器重复传输到另一个服务器的最快方式

转载 作者:IT王子 更新时间:2023-10-29 02:15:40 27 4
gpt4 key购买 nike

背景

我正在尝试在 go 中创建一个内存 + cpu 分析器,并希望快速传输信息,也许每秒,从正在分析的程序/服务到服务器,该服务器将通过保存数据来完成所有繁重的工作到数据库和/或通过 http 将其提供给站点;这将减少正在分析的程序的负载以进行更准确的测量。传输的将是小块数据。我知道已经有一些库了,但就像我说的,正在试验中。

传输内容类型

我还没有决定具体的传输类型,但看起来像用于 HTTP 或 Websockets 的 JSON 以及用于 RPC 的结构(如果我已经正确完成了我的研究)

总结

我可能会尝试每一个,只是为了亲眼看看,但我对使用 RPC 和 Websockets 的经验很少,并且想要一些可能更快或更适合我正在尝试做的事情的意见或建议:

  • HTTP
  • 远程调用
  • 网络套接字
  • 其他我没有考虑的事

最佳答案

正如您在评论中提到的,HTTP 不是必需的。

在这种情况下,为了寻找最快的传输解决方案,我会完全放弃 HTTP 传输层,而只使用普通 (TCP) 套接字连接,因为 HTTP 仅传输几个字节就会产生相当大的开销。

定义您自己的协议(protocol)(可能非常简单),打开到服务器的 TCP 连接,并根据您的要求每隔几秒左右发送一次数据包。

发送(和接收)数据的协议(protocol)可以很简单:

  • 执行可选的身份验证或客户端/服务器标识(以确保您已连接到您想要连接的服务器/程序)。
  • 使用encoding/gob标准库中的 packgae 通过连接以二进制形式发送数据。

所以基本上,配置文件程序(客户端)应该打开 TCP 连接,并使用 gob.NewEncoder()包装连接以发送数据。服务器应接受传入的 TCP 连接并使用 gob.NewDecoder()包装连接以接收数据。

客户来电Encoder.Encode()所以发送分析信息,它通常可以是一个结构值。服务器调用 Decoder.Decode()接收分析信息,即客户端发送的结构。就这样。

使用encoding/gob 包发送二进制形式的数据需要你使用相同的类型来描述两边的profiling数据。如果你想要更多的灵 active ,你也可以使用 encoding/json以 JSON 文本形式发送/接收分析信息的包。缺点是 JSON 需要发送更多数据,并且与二进制表示相比,生成和解析 JSON 文本需要更多时间。

如果丢失一些分析数据包(或收到重复数据包)不是问题,您可能想尝试/试验使用 UDP 而不是 TCP,这可能更有效。

关于performance - go rpc、http 或 websockets,这是将许多小块数据从一个服务器重复传输到另一个服务器的最快方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com