簡體   English   中英

通過套接字發送壓縮數據

[英]Sending compressed data via socket

我必須在java中創建一個日志服務器,一個任務是發送壓縮的數據。 現在我用純文本逐行發送它,但我必須壓縮它。 服務器處理“HTTP like”請求。 例如,我可以獲得發送“GET xxx.log”的日志。 這將建立到服務器的TCP連接,帶有標頭和日志的服務器響應,並關閉連接。 客戶端逐行讀取並分析每個LOG條目。 我嘗試了一些沒有成功的方法。 我的主要問題是我不知道每一行的結束位置(在客戶端大小)。 任何想法?

在服務器上使用GZIPOutputStream,在客戶端使用GZIPInputStream,其周圍有一個InputStreamReader,周圍有一個BufferedReader。 然后只讀行。

最有意義的是這樣的事情

  1. 客戶端發送GET foo.log
  2. 服務器發送“大小:15042 \\ n”
  3. 服務器發送壓縮的日志文件,整個
  4. 客戶端解析Size:標頭(讀取直到換行符),然后知道預期的字節數
  5. 然后,客戶端從服務器讀取所有這些字節(示例中為15042)
  6. 客戶端解壓縮接收的數據
  7. 客戶端然后處理日志(解壓縮,你會找到換行符)

您可以查看HTTP Range標頭。 客戶端可以請求一系列字節,服務器將只返回那些字節。 使用GZIP壓縮。

在請求部分日志之前,您可以從客戶端調用一個將提供帶字節范圍的索引的操作。

HTTP標頭有很多開銷,因此您可以考慮一次發送100行或更多。

最后,查看分塊傳輸編碼,它允許您將數據流式傳輸到客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM