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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
PHP中的流(streams)浅析
Jul 02 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 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正则校验用户名介绍
2008/07/19 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Python 装饰器深入理解
2017/03/16 Python
Python3 Random模块代码详解
2017/12/04 Python
python flask中静态文件的管理方法
2018/03/20 Python
简单了解python单例模式的几种写法
2019/07/01 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
摄影专业毕业生求职信
2014/03/13 职场文书
承诺书格式范文
2014/06/03 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
会计学专业求职信
2014/07/17 职场文书
部门活动策划方案
2014/08/16 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
闪闪的红星观后感
2015/06/08 职场文书
借钱欠条怎么写
2015/07/03 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
如何在Python中妥善使用进度条详解
2022/04/05 Python