php使用event扩展的io复用测试的示例


Posted in PHP onOctober 20, 2020

先要安装event扩展,这样才可以使用libevent的事件机制

pecl install event

测试代码

//连接重用
//创建资源流的上下文
$context=stream_context_create([
  'socket'=>[
    'backlog'=>2000
  ]]);
stream_context_set_option($context,'socket','so_reuseaddr',1); //设置连接重用
//sock_set_option($this->server, SOL_SOCKET, SO_REUSEADDR, 1); //复用还处于 TIME_WAIT
$socket = stream_socket_server("tcp://0.0.0.0:8070", $errno, $errstr,STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,$context);
stream_set_blocking($socket,false);//非阻塞
//绑定事件
$base=new EventBase();
//监听服务端的socket
$event=new Event($base,$socket,Event::PERSIST |Event::READ | Event::WRITE,function ($socket)use(&$base){

  $client = stream_socket_accept($socket);
  //stream_set_blocking($client,false);//非阻塞
//    var_dump($client);
//    $content='21335435';
//    $string="HTTP/1.1 200 OK\r\n";
//    $string.="Content-Type: text/html;charset=utf-8\r\n";
//    $string.="Content-Length: ".strlen($content)."\r\n\r\n";
//    fwrite($client,$string.$content);
//    fclose($client);

  //global $base;

  //var_dump($socket,$client);

  $base=new EventBase();
  //监听客户端socket
  $event=new Event($base,$client,Event::PERSIST |Event::READ | Event::WRITE,function ($client){
    $msg=fread($client,65535);
//
//     if($msg){ //匹配请求头包含了keep-alive
//
//     }

    $content='hello world';
    $string="HTTP/1.1 200 OK\r\n";
    $string.="Content-Type: text/html;charset=utf-8\r\n";
    $string.="Connection: keep-alive\r\n";
    $string.="Content-Length: ".strlen($content)."\r\n\r\n";
    fwrite($client,$string.$content);

    fclose($client);

 
    //当socket断开连接,删除事件

    $event->del();//删除事件


  });
  $event->add(); //加入事件监听
  $base->loop();

  //监视客户端
  //$event->del();//删除事件
});
$event->add(); //加入事件监听
var_dump($base->loop()); //调度挂起事件监听

php使用event扩展的io复用测试的示例

php使用event扩展的io复用测试的示例

以上就是php使用event扩展的io复用测试的示例的详细内容,更多关于php io复用测试的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
在PHP中利用XML技术构造远程服务(上)
Oct 09 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
php实现简单文件下载的方法
Jan 30 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
PHP实现远程下载文件到本地
May 17 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 #PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 #PHP
php实现记事本案例
Oct 20 #PHP
Laravel统一错误处理为JSON的方法介绍
Oct 18 #PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 #PHP
PHP 99乘法表的几种实现代码
Oct 13 #PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 #PHP
You might like
php使用标签替换的方式生成静态页面
2015/05/21 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
node.js实现端口转发
2016/04/14 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
理解Koa2中的async&await的用法
2018/02/05 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python获取当前日期和时间的方法
2015/04/30 Python
python集合用法实例分析
2015/05/30 Python
Python切片知识解析
2016/03/06 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
python判断输入日期为第几天的实例
2018/11/13 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
音乐表演专业毕业生求职信
2013/10/14 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
结婚司仪主持词
2015/06/29 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis