my_net_write是mysql客户端向服务端写mysql包时候用到的函数,大致流程如下:
...忽略N行....
while (len >= MAX_PACKET_LENGTH)//len代表要写出的包长,MAX_PACKET_LENGTH=16M,其中16M代表一个mysql数据包最大长度。这里表示如果包超过mysql包最大长
//度的话,必须对这个包进行分包处理。
{
const ulong z_size = MAX_PACKET_LENGTH;
int3store(buff, z_size);
buff[3]= (uchar) net->pkt_nr++;//每个包都有一个序号,包括分包也是独立序号,每次都增加,直到新的command清零。
if (net_write_buff(net, buff, NET_HEADER_SIZE) ||//这里先写头,再写body,为何不一起写出去?mysql对数据包这块做了优//
//化,不是每次写出都马上刷到缓存区了,客户端自己维护了一个buffer只有如果这个 buffer还有空间,那么mysql可能选择先不写出这个包,等后面的包写人后一起刷出。
net_write_buff(net, packet, z_size))
{
MYSQL_NET_WRITE_DONE(1);
return 1;
}
packet += z_size;
len-= z_size;
}
/* Write last packet *//对于不分包的包 直接写出
int3store(buff,len);
buff[3]= (uchar) net->pkt_nr++;
if (net_write_buff(net, buff, NET_HEADER_SIZE))
{
MYSQL_NET_WRITE_DONE(1);
return 1;
}
rc= test(net_write_buff(net,packet,len));
MYSQL_NET_WRITE_DONE(rc);
return rc;

被折叠的 条评论
为什么被折叠?



