全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1552
推到 Plurk!
推到 Facebook!

請教網絡傳輸數據壓縮的問題

缺席
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-14 11:42:42 IP:218.18.xxx.xxx 未訂閱

[code delphi]
現在正在定義自己的網絡傳輸協議,是以XML方式定義報文,如:

<?xml version="1.0" encoding="UTF-8"?>

....SomeData


我在接收數據時,會根據"<?xml "與""字串來從Buffer中分析提取一條完整報文。

有時某個XML數據包會比較大(1MB),所以我希望能在傳輸前先壓縮,
我現在的做法是把XML報文中的...SomeData部分進行壓縮,再放到" "與""之間
接收到數據時,先對" "與""之間內容進行解壓縮,在進行報文業務內容進行分析。

現在的問題是,報文內容壓縮後,就可能與XML格式相衝突,即難保壓縮後的內容中不會出現
""等用來區分報文的特殊字符。一旦出現,就會造成報文無法正確從Buffer中分取出來。

請問大家有什麽好的思路或方法,可以解決這個問題,或是有別的辦法可以減小網絡傳輸量?

[/code]
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
編輯記錄
h@visli 重新編輯於 2007-11-14 11:49:10, 註解 無‧
h@visli 重新編輯於 2007-11-14 12:32:54, 註解 無‧
h@visli 重新編輯於 2007-11-14 12:35:21, 註解 無‧
h@visli 重新編輯於 2007-11-14 12:36:34, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-14 12:44:45 IP:210.66.xxx.xxx 訂閱
說明一 下我的做法:

假設封包定義為以下的格式(括符內的數值為欄位長度)

STX(1) LEN(2) PktType(1) DataType(1) DATA(n) CRC(2) ETX(1)

我都是讓已壓縮的封包佔用一種傳輸格式,
亦即佔用一個 PktType(1) DataType(1) 編號.

首先在發送端會將許多個封包壓縮成一個
然後在接收端將它還原成原來許多個封包
的格式, 最後依序將每個封包進行解碼.

個人意見, 僅供參考...

編輯記錄
jow 重新編輯於 2007-11-14 12:45:22, 註解 無‧
jow 重新編輯於 2007-11-14 12:51:16, 註解 無‧
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-15 12:48:04 IP:59.40.xxx.xxx 未訂閱
问题今天自己已找到解决办法:
先对要发送的文本压缩,
再对压缩结果进行Base64编码
最后添加到发送报文中

原文长度 1635206
334101 ... 压缩减小 79.568262347374
445468 ... Base64编码增长 25
445468 ... Base64编码减小 72.757683129832
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
系統時間:2024-04-29 3:44:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!