为了账号安全,请及时绑定邮箱和手机立即绑定

转 rpc、http 或 websockets,这是将许多小数据重复从一台服务器传输

转 rpc、http 或 websockets,这是将许多小数据重复从一台服务器传输

Go
慕斯709654 2021-11-08 15:36:32
背景我正在尝试在 go 中创建内存 + cpu 分析器,并希望快速传输信息,也许每秒,从正在分析的程序/服务到服务器,该服务器将通过将数据保存到数据库来完成所有繁重的工作和/或通过 http 将其提供给网站;这将减少正在分析的程序的负载,以实现更准确的测量。这将是传输的小块数据。我知道已经有一些图书馆了,但就像我说的,正在试验中。传输内容类型我还没有决定具体的传输类型,但看起来像 HTTP 或 Websockets 的 JSON 和 RPC 的结构(如果我已经正确完成了我的研究)概括我可能会尝试每一个只是为了自己看看,但几乎没有使用 RPC 和 Websockets 的经验,并且想要一些关于可能更快或更适合我正在尝试做的事情的意见或建议:HTTPRPC网络套接字还有什么我没有考虑的
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

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

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

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

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

  • 进行可选的身份验证或客户端/服务器识别(以确保您连接到您想要的服务器/程序)。

  • 使用encoding/gob标准库中的packgae 通过连接以二进制形式发送数据。

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

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

使用encoding/gob包以二进制形式发送数据要求您使用相同的类型来描述双方的分析数据。如果您想要更大的灵活性,您还可以使用该encoding/json包将分析信息作为 JSON 文本发送/接收。缺点是 JSON 需要发送更多数据,并且与二进制表示相比,生成和解析 JSON 文本需要更多时间。

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


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信