看板 java 關於我們 聯絡資訊
請問一下各位, 假設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
mars90226: 你用TCP就會照順序,UDP就看運氣 07/21 15:56
tas72732002: 第二個命令的封包不會插隊嗎? 07/21 15:57
tas72732002: 是因為io是single thread嗎? 07/21 15:57
※ 編輯: tas72732002 (125.227.144.199), 07/21/2015 15:58:18
LaPass: 用tcp他會幫你搞定順序的問題 07/21 17:14
cowbaying: 會序列化 07/21 17:52
cowbaying: 不用擔心順序問題 07/21 17:53
banjmin: 去google tcp sliding window 07/21 20:11
omidofor: 高階語言都幫你封裝起來了,你根本不用擔心底層的問題 07/21 20:41
omidofor: 反而應該要注意的是Outputsteam在multi-thread下有沒有 07/21 20:43
omidofor: co-operation的問題 07/21 20:43
dou0228: TCP 沒有這問題, 除非你用 UDP 送 07/22 08:43
tas72732002: 我想如果是multi-thread, Client又是single thread 07/22 11:30
tas72732002: 處理io, 應該就會造成插隊的情況吧 07/22 11:31
LaPass: socket最好用單一條執行序去處理。 07/22 13:40