swoole( 网络IO 三)

一次性向客户端发送一个大的数据包的时候

客户端:

$client->send(str_repeat(‘xxx’,1024*1024*1));

服务端:

$serv->on(‘receive’,function($serv,$fd,$from_id,$data){

Echo ‘接收到’.$fd.’的信息’;

$serv->send($fd,”server:”.$data);

})

粘包解决

1)延迟发送不是最佳答案

2)分隔符

A)特殊字符

B)swoole的EOF方式处理(资源消耗)

 

C)因为每次传送到服务端的数据的长度是固定的,可以根据数据的长度做一个区分

(pack 数据长度)+ 实际的数据

比较大的包,连接的时候,有时会断开

1)重连机制

2)数据校验-确认机制

 

 

 

网络IO模型

进程

好比系统中运行的程序 php index.php

 

父进程:管理

子进程:工作

 

代码+数据+内核空间(类似于swoole官网)

 

线程

也会称为轻量级的进程,是程序执流中最小的单位

 

就是任务,例如一个项目中的商品详情,购物车

 

一个进程可以有多个线程(进程消耗大,所以出现了线程)

 

每一个连接就是一个线程

 

多进程

 

协程

比线程小,一个线程可以有多个协程

图解(进程,线程,协程)

进程(公司)  线程(上班正常的) 协程(上班过程中去个厕所也可以做事情)

 

 

 

初始化 -> 可运行 -> 运行中 -> 结束

 

1)涉及到锁

2)涉及到线程阻塞和运行之间的切换

 

阻塞:同时点击很多线程(任务) 会造成阻塞  不断转圈圈

 

协程 多个房间  VIP

发布了57 篇原创文章 · 获赞 1 · 访问量 3742
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章