首页 » PHP教程 » php单线程技巧_PHP实现reactor单线程收集模型

php单线程技巧_PHP实现reactor单线程收集模型

访客 2024-10-26 0

扫一扫用手机浏览

文章目录 [+]

它常常涌如今很多软件与外部交互的网络部分,如:

redis利用reactor单线程网络IO模型。

php单线程技巧_PHP实现reactor单线程收集模型

kafka利用reactor多线程网络IO模型。

php单线程技巧_PHP实现reactor单线程收集模型
(图片来自网络侵删)

为什么须要利用网络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("socket bind error");}// 监听$listenRe = socket_listen($listenFd, 100);if (!$listenRe) { die("socket listen error");}global $eventArr, $eventBase;// 实例化根本事宜句柄,相称与 epoll_create 操作$eventBase = new EventBase();// 绑定监听句柄,到根本事宜句柄, 相称于 epoll_ctl 操作$event = new Event($eventBase, $listenFd, Event::PERSIST | Event::READ, "ep_accept");$event->add();// 等待句柄就绪, 相称于 epoll_wait 操作$eventBase->loop();function ep_accept($listener) { global $eventBase, $eventArr; if (($client = socket_accept($listener)) !== false){ $tmp = "连接成功\n"; socket_write($client, $tmp, strlen($tmp)); // 绑定端socket,到根本事宜句柄, 相称于 epoll_ctl 操作 $clientEvent = new Event($eventBase, $client, Event::PERSIST | Event::READ, "ep_read", $client); $clientEvent->add(); // event实例一定要存放在一个全局数组里面。
如果去掉该行,客户端逼迫断开再连接,做事端无法正常收到 // 这里这一步我也不知道缘故原由,注目掉确实会导致客户端断开 // 希望能看到这里的大佬,评论区奉告不才缘故原由。
// 欢迎互换 $eventArr[intval($client)] = $clientEvent; }}function ep_read($fd) { $buffer = socket_read( $fd, 250 ); $msg = "你说:{$buffer}"; socket_write( $fd, $msg, strlen( $msg ) );}

启动做事

php ceshi.php

结果截图

reactor单线程网络模型

我实现的功能是客户端发什么,做事端将重新返回给客户端。

这里我开了两个客户端作测试。
符合实验的预期。

我个人以为学习是个人的事,我的文章侧重于抛出一些不雅观点,然后用大略的例子去论证,从而引发大家的兴趣,文章之中很多都是我参考了很多资料之后最简要的解释。
大家该当关注文章之中引发个人困惑的东西,然后去思考学习。

标签:

相关文章

今日头条算法岗位面试核心方法与必备知识

大数据、人工智能等技术在各行各业得到了广泛应用。今日头条作为中国领先的资讯平台,其算法技术更是备受关注。今日头条算法岗位面试成为了...

PHP教程 2025-01-31 阅读1 评论0

今日头条算法推送如何打造个化阅读体验

在互联网时代,信息爆炸成为常态,用户获取信息的渠道越来越多,而时间却愈发有限。如何让用户在海量信息中快速找到感兴趣的内容,成为了各...

PHP教程 2025-01-31 阅读1 评论0