[问题] 关于封包传送底层处理的方式

楼主: tas72732002 (葱头)   2015-07-21 15:41:10
请问一下各位,
假设Server有两个命令传送到Client, 这两个命令都非常长,
ex : {'apiName' : 'auth' , 'para' : 'xxxdffd.............'};
在传送命令的时候, "一个命令可能被拆成好几个封包传送",
想请问OutputStream的处理会等到第一个命令都传送完才传送第二个命令吗,
因为接收方如果还没接收完第一个命令, 就接到了第二个命令的封包,
这样有可能造成解析错误, 如下所示,
Client 接收过程 : 命令A第一个封包->命令B第一个封包->命令A第二个封包
我这边的理解应该是OutputStream会传送完第一个命令的封包,
才会传送第二个命令的封包, 彼此不会交替
Client 接收过程 : 命令A第一个封包->命令A第二个封包->命令B第一个封包
->命令B第二个封包
不知大家的看法为何 ?
作者: mars90226 (火星人)   2015-07-21 15:56:00
你用TCP就会照顺序,UDP就看运气
楼主: tas72732002 (葱头)   2015-07-21 15:57:00
第二个命令的封包不会插队吗?是因为io是single thread吗?
作者: LaPass (LaPass)   2015-07-21 17:14:00
用tcp他会帮你搞定顺序的问题
作者: cowbaying (是在靠北喔)   2015-07-21 17:52:00
会序列化不用担心顺序问题
作者: banjmin (HD)   2015-07-21 20:11:00
去google tcp sliding window
作者: omidofor (妈妈咪呀)   2015-07-21 20:41:00
高阶语言都帮你封装起来了,你根本不用担心底层的问题反而应该要注意的是Outputsteam在multi-thread下有没有co-operation的问题
作者: dou0228 (7777)   2015-07-22 08:43:00
TCP 没有这问题, 除非你用 UDP 送
楼主: tas72732002 (葱头)   2015-07-22 11:30:00
我想如果是multi-thread, Client又是single thread处理io, 应该就会造成插队的情况吧
作者: LaPass (LaPass)   2015-07-22 13:40:00
socket最好用单一条执行序去处理。

Links booklink

Contact Us: admin [ a t ] ucptt.com