作者tas72732002 (葱头)
看板java
标题[问题] 关於封包传送底层处理的方式
时间Tue Jul 21 15:41:10 2015
请问一下各位,
假设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://webptt.com/cn.aspx?n=bbs/java/M.1437464473.A.56D.html
※ 编辑: tas72732002 (125.227.144.199), 07/21/2015 15:41:24
1F:推 mars90226: 你用TCP就会照顺序,UDP就看运气 07/21 15:56
2F:→ tas72732002: 第二个命令的封包不会插队吗? 07/21 15:57
3F:→ tas72732002: 是因为io是single thread吗? 07/21 15:57
※ 编辑: tas72732002 (125.227.144.199), 07/21/2015 15:58:18
4F:推 LaPass: 用tcp他会帮你搞定顺序的问题 07/21 17:14
5F:→ cowbaying: 会序列化 07/21 17:52
6F:→ cowbaying: 不用担心顺序问题 07/21 17:53
7F:推 banjmin: 去google tcp sliding window 07/21 20:11
8F:推 omidofor: 高阶语言都帮你封装起来了,你根本不用担心底层的问题 07/21 20:41
9F:→ omidofor: 反而应该要注意的是Outputsteam在multi-thread下有没有 07/21 20:43
10F:→ omidofor: co-operation的问题 07/21 20:43
11F:→ dou0228: TCP 没有这问题, 除非你用 UDP 送 07/22 08:43
12F:→ tas72732002: 我想如果是multi-thread, Client又是single thread 07/22 11:30
13F:→ tas72732002: 处理io, 应该就会造成插队的情况吧 07/22 11:31
14F:推 LaPass: socket最好用单一条执行序去处理。 07/22 13:40