php多线程(php和java哪个好)
php多线程(php和java哪个好)微博Qzone微信PHP实现reactor单线程网络模型
原创流浪剑客262021-05-08 23:12:24在各种网络模型的文章中,我们常常能看到 reactor 网络模型。
它常常出现在很多软件与外部交互的网络部分,如:
redis使用reactor单线程网络IO模型。
kafka使用reactor多线程网络IO模型。
为什么需要使用网络IO模型
关于为什么要使用网络IO模型:大家需要理解一下用户态、内核态、阻塞、非阻塞、同步、异步、IO多路复用等知识。
简单来讲
在这里简单地讲,就是用户态程序没法直接操作网络IO设备,它需要发起系统调用,将控制权交给操作系统内核,内核将数据从网卡中读取数据,返回给用户态程序。在这个过程中用户态程序是等待还是不等待,内核处理的结果是怎样通知给用户程序,这就是网络IO模型可以作优化的地方。
根本原因
说到底就是优化CPU的执行时间片,不能让CPU闲着。
很重要
补充一点网络数据的 copy 操作不是CPU执行的,CPU只是初始化这个传输动作,具体数据的 copy 是由 DMA 设备来完成的。
PHP实现Reactor单线程网络模型
reactor单线程网络模型,使用到了IO多路复用的epoll模型,事件机制。操作系统需要安装libevent扩展,php需要安装event、sockets扩展。
测试例子<?php$addr="0.0.0.0"; $port=8888;//创建服务端socket$listenFd=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//绑定$bindRe=socket_bind($listenFd,$addr,$port);if(!$bindRe){die("socketbinderror"); }//监听$listenRe=socket_listen($listenFd,100);if(!$listenRe){die("socketlistenerror"); }global$eventArr,$eventBase;//实例化基础事件句柄,相当与epoll_create操作$eventBase=newEventBase();//绑定监听句柄,到基础事件句柄,相当于epoll_ctl操作$event=newEvent($eventBase,$listenFd,Event::PERSIST|Event::READ,"ep_accept"); $event->add();//等待句柄就绪,相当于epoll_wait操作$eventBase->loop();functionep_accept($listener){global$eventBase,$eventArr;if(($client=socket_accept($listener))!==false){ $tmp="连接成功\n"; socket_write($client,$tmp,strlen($tmp));//绑定端socket,到基础事件句柄,相当于epoll_ctl操作 $clientEvent=newEvent($eventBase,$client,Event::PERSIST|Event::READ,"ep_read",$client); $clientEvent->add();//event实例一定要存放在一个全局数组里面。如果去掉该行,客户端强制断开再连接,服务端无法正常收到消息 //这里这一步我也不知道原因,注视掉确实会导致客户端断开 //希望能看到这里的大佬,评论区告知在下原因。 //欢迎交流 $eventArr[intval($client)]=$clientEvent; } }functionep_read($fd){ $buffer=socket_read($fd,250); $msg="你说:{$buffer}"; socket_write($fd,$msg,strlen($msg)); }
启动服务
php ceshi.php
结果截图
reactor单线程网络模型
我实现的功能是客户端发什么消息,服务端将消息重新返回给客户端。
这里我开了两个客户端作测试。符合实验的预期。
我个人觉得学习是个人的事,我的文章侧重于抛出一些观点,然后用简单的例子去论证,从而引发大家的兴趣,文章之中很多都是我参考了很多资料之后最简要的说明。大家应该关注文章之中引发个人困惑的东西,然后去思考学习。
脖子落枕怎么办(脖子落枕最快恢复办法)来源生命时报河北读者王先生问最近我经常落枕,脖子十分难受,根本无法正常活动,但每次都要等几天症状才能慢慢好转,比较耽误事。请问有什么办法能够帮我缓解落枕吗?东南大学附属中大医院康复
n的阶乘(c阶乘公式怎么算)n的阶乘(c阶乘公式怎么算)分析从键盘输入一个数,求出这个数的阶乘,即n!。所谓n的阶乘,就是从1开始乘以比前一个数大1得数,一直乘到n,用公式表示就是n!n(n1)(n2)432
知识春江湖水连海平的下一句是什么?关于到现在春江湖水连海平的下一句是什么?这个话题相信很多小伙伴都是非常有兴趣了解的吧因为这个话题也是近期非常火热的那么既然现在大家都想要知道春江湖水连海平的下一句是什么?小编也是到
湖水是你的眼神(湖水是你的眼)湖水是你的眼神(湖水是你的眼)瀑布选择了悬崖,它便跌宕成了一首奔腾的歌种子选择了泥土,它才成就了一片蓬勃的绿蚌选择了创伤,它才孕育出夺目的珍珠老鹰选择了蓝天,它才成为勇敢者的化身。
湖水还像什么(湖水在你眼中还像什么)湖水还像什么(湖水在你眼中还像什么)烟波浩渺,碧波连天的尕海湖像一颗翡翠玉盘镶嵌在高山草原之间,当地牧民群众称其为乐家秀木湖,海拔3480m,水域面积近两千六百余公顷,水最深处约5
湖水是你的眼神梦想满天星辰(心愿湖水是你的眼神)湖水是你的眼神梦想满天星辰(心愿湖水是你的眼神)湖水是你的的眼神(八年级第二期)经过一个冬天的淡定,躁动的心在春天来临时蠢蠢欲动。长长的队伍在春天的山野走成人们眼中的风景,桃花山就
湖水是你的眼神梦想满天星辰(湖水是你的眼神是什么歌)湖水是你的眼神梦想满天星辰(湖水是你的眼神是什么歌)一次听见这首歌,是在它已经被录制出来的24年之后。那是一个冬日的夜晚,当这首歌的旋律在耳边响起的时候,一些属于上个世纪90年代的
波浪线怎么打(电脑输入怎么弄中间)波浪线怎么打(电脑输入怎么弄中间)我们在使用Word进行办公时,经常会在处理文本时加入一些特殊符号,那么波浪线是怎么加的呢?今天我们将为大家介绍一种特别简单易懂的方法,下面就来一起
湖水是你的眼神(你的眼神简谱蔡琴)湖水是你的眼神(你的眼神简谱蔡琴)布选择了悬崖,它便跌宕成了一首奔腾的歌种子选择了泥土,它才成就了一片蓬勃的绿蚌选择了创伤,它才孕育出夺目的珍珠老鹰选择了蓝天,它才成为勇敢者的化身
湖水是你的眼神(你的眼神给我温暖作文)湖水是你的眼神(你的眼神给我温暖作文)202103222312一品唐宋瀑布选择了悬崖,它便跌宕成了一首奔腾的歌种子选择了泥土,它才成就了一片蓬勃的绿蚌选择了创伤,它才孕育出夺目的珍
鱼的尾巴像什么(鱼的写真)鱼的尾巴像什么(鱼的写真)摄影师从2015年年中开始拍摄斗鱼,一直到现在。斗鱼很神奇,你可以发现它们有各种各样的颜色,它们的尾巴就像裙子一样,它们都有不同的图案,看起来它们每一个都