|
一次性向客户端发送一个大的数据包的时候 |
客户端: $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 |
swoole( 网络IO 三)
最新推荐文章于 2020-12-08 17:53:56 发布
本文探讨了网络通信中的一次性大数据包传输问题,包括客户端和服务端的交互过程,粘包现象及其解决方案,如使用分隔符和数据包长度标识。此外,还介绍了网络IO模型、进程、线程及协程的概念,分析了它们在处理网络通信中的作用和区别。






514

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



