关于TCP网络通信
TCP协议在底层机制上解决了UDP协议的顺序和丢包重传问题。但相比UDP又带来了新的问题,TCP协议是流式的,数据包没有边界。应用程序使用TCP通信就会面临这些难题。一些程序在本机测试是正确的,上线后就出现各种奇怪的BUG。如下面的伪代码,客户端向服务器端发送一个json字符串,服务器端接收此字符串。在慢速网络中Server无法正确接收完整的JSON字符串。
$client->send(json_encode('a' => $data_10k, 'b' => $data_5k)); $pkg = $server->recv(); //Server收到的数据只有一小部分 $client->send("hello1"); $client->send("hello2"); $client->send("hello3"); $pkg = $server->recv(); //Server会一次性收到3个数据包
因为TCP通信是流式的,在接收1个大数据包时,可能会被拆分成多个数据包发送。多次Send底层也可能会合并成一次进行发送。这里就需要2个操作来解决:…
近期评论