[問題] 關於封包傳送底層處理的方式

看板java作者 (蔥頭)時間10年前 (2015/07/21 15:41), 10年前編輯推噓5(509)
留言14則, 7人參與, 最新討論串1/1
請問一下各位, 假設Server有兩個命令傳送到Client, 這兩個命令都非常長, ex : {'apiName' : 'auth' , 'para' : 'xxxdffd.............'}; 在傳送命令的時候, "一個命令可能被拆成好幾個封包傳送", 想請問OutputStream的處理會等到第一個命令都傳送完才傳送第二個命令嗎, 因為接收方如果還沒接收完第一個命令, 就接到了第二個命令的封包, 這樣有可能造成解析錯誤, 如下所示, Client 接收過程 : 命令A第一個封包->命令B第一個封包->命令A第二個封包 我這邊的理解應該是OutputStream會傳送完第一個命令的封包, 才會傳送第二個命令的封包, 彼此不會交替 Client 接收過程 : 命令A第一個封包->命令A第二個封包->命令B第一個封包 ->命令B第二個封包 不知大家的看法為何 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.144.199 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1437464473.A.56D.html ※ 編輯: tas72732002 (125.227.144.199), 07/21/2015 15:41:24

07/21 15:56, , 1F
你用TCP就會照順序,UDP就看運氣
07/21 15:56, 1F

07/21 15:57, , 2F
第二個命令的封包不會插隊嗎?
07/21 15:57, 2F

07/21 15:57, , 3F
是因為io是single thread嗎?
07/21 15:57, 3F
※ 編輯: tas72732002 (125.227.144.199), 07/21/2015 15:58:18

07/21 17:14, , 4F
用tcp他會幫你搞定順序的問題
07/21 17:14, 4F

07/21 17:52, , 5F
會序列化
07/21 17:52, 5F

07/21 17:53, , 6F
不用擔心順序問題
07/21 17:53, 6F

07/21 20:11, , 7F
去google tcp sliding window
07/21 20:11, 7F

07/21 20:41, , 8F
高階語言都幫你封裝起來了,你根本不用擔心底層的問題
07/21 20:41, 8F

07/21 20:43, , 9F
反而應該要注意的是Outputsteam在multi-thread下有沒有
07/21 20:43, 9F

07/21 20:43, , 10F
co-operation的問題
07/21 20:43, 10F

07/22 08:43, , 11F
TCP 沒有這問題, 除非你用 UDP 送
07/22 08:43, 11F

07/22 11:30, , 12F
我想如果是multi-thread, Client又是single thread
07/22 11:30, 12F

07/22 11:31, , 13F
處理io, 應該就會造成插隊的情況吧
07/22 11:31, 13F

07/22 13:40, , 14F
socket最好用單一條執行序去處理。
07/22 13:40, 14F
文章代碼(AID): #1LhVUPLj (java)
文章代碼(AID): #1LhVUPLj (java)