2009年2月18日 星期三

scoket傳送封包流過長

趁著從台北開會搭公車回來,測試研究的系統穩定度
發現搭車到到一半時就發生過長時間才收到server的回應
最後一筆有效紀錄(經web server過濾後所顯示)的地圖標點

都來沒走一半呢...
回到研究室看看debug訊息~

怪哉~ 再看console
不知道什麼原因造成多筆記錄在同一筆傳送
socket封包支援到1024byte,一旦超過,傳送的data stream 就會被截斷在下一個封包繼續傳送
如果網路狀況不擁擠(小於1024byte),那麼頂多只會loss掉幾筆資料..
但如果遇到split(,),剛好data資料開頭剛好是"," 程式裡頭判斷所欲存之值為空..就會發生錯誤(格式不對)

看看資料庫就知道...多糟了><

看樣子,要避開這種情況目前想到只有
  1. 修改每次傳送封包格式的大小,能整除1024(目前一筆資料大小為76byte以下),這樣就能確保所存資料格式正確
    但server程式部分要限制每個欄位的資料大小,之後如果PDA要新增傳送資料,要再修改 重算能整除值...而對定位而言,更會遺失至多12筆資料(1024/76=13.47)
  2. server程式先行判斷所收到資料筆數(依封包大小),再複雜變數儲存判斷,但好像遇到封包過大,還是有stream被截的問題...
  3. 搜尋stream buffer相關.. 迫使程式接收一定是一筆一筆進來分析.
看樣子 方法三應該是比較簡單的,不用修改太多程式碼,要花時間的是找stream buffer部分的知識了~

沒有留言:

張貼留言

try comments