亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉 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 關注
  • 243 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號