1 回答

TA貢獻(xiàn)1816條經(jīng)驗 獲得超6個贊
正如您在評論中提到的,HTTP 不是必需的。
在這種情況下,為了尋找最快的傳輸解決方案,我將完全放棄 HTTP 傳輸層,只使用普通 (TCP) 套接字連接,因為 HTTP 僅傳輸幾個字節(jié)就會產(chǎn)生相當(dāng)大的開銷。
定義您自己的協(xié)議(這可能非常簡單),打開與服務(wù)器的 TCP 連接,并根據(jù)您的要求每隔幾秒左右發(fā)送一次數(shù)據(jù)包。
您發(fā)送(和接收)數(shù)據(jù)的協(xié)議可以很簡單:
進(jìn)行可選的身份驗證或客戶端/服務(wù)器識別(以確保您連接到您想要的服務(wù)器/程序)。
使用
encoding/gob
標(biāo)準(zhǔn)庫中的packgae 通過連接以二進(jìn)制形式發(fā)送數(shù)據(jù)。
所以基本上分析程序(客戶端)應(yīng)該打開TCP連接,并使用gob.NewEncoder()
包裝連接來發(fā)送數(shù)據(jù)。服務(wù)器應(yīng)接受傳入的 TCP 連接并用于gob.NewDecoder()
包裝連接以接收數(shù)據(jù)。
客戶端調(diào)用Encoder.Encode()
所以發(fā)送分析信息,它通??梢允且粋€結(jié)構(gòu)值。服務(wù)器調(diào)用Decoder.Decode()
以接收分析信息,即客戶端發(fā)送的結(jié)構(gòu)。就這樣。
使用encoding/gob
包以二進(jìn)制形式發(fā)送數(shù)據(jù)要求您使用相同的類型來描述雙方的分析數(shù)據(jù)。如果您想要更大的靈活性,您還可以使用該encoding/json
包將分析信息作為 JSON 文本發(fā)送/接收。缺點是 JSON 需要發(fā)送更多數(shù)據(jù),并且與二進(jìn)制表示相比,生成和解析 JSON 文本需要更多時間。
如果丟失一些分析數(shù)據(jù)包(或接收重復(fù)數(shù)據(jù))不是問題,您可能想要嘗試/實驗使用 UDP 而不是 TCP,這可能會更有效。
- 1 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報