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

 更新时间:2020年10月20日 11:29:33   作者:陶士涵  
这篇文章主要介绍了php使用event扩展的io复用测试的示例,帮助大家更好的理解和使用php,感兴趣的朋友可以了解下

先要安装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 io复用测试的资料请关注脚本之家其它相关文章!

相关文章

  • ThinkPHP类似AOP思想的参数验证的实现方法

    ThinkPHP类似AOP思想的参数验证的实现方法

    这篇文章主要介绍了ThinkPHP类似AOP思想的参数验证的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Laravel框架表单验证操作实例分析

    Laravel框架表单验证操作实例分析

    这篇文章主要介绍了Laravel框架表单验证操作,结合实例形式分析了Laravel框架表单验证相关的表单数据提交、验证、错误信息提示等相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • PHP实现小偷程序实例

    PHP实现小偷程序实例

    本篇文章主要介绍了PHP实现小偷程序实例,实现了抓取网页咨询和商品信息的功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • 合并ThinkPHP配置文件以消除代码冗余的实现方法

    合并ThinkPHP配置文件以消除代码冗余的实现方法

    这篇文章主要介绍了合并ThinkPHP配置文件以消除代码冗余的实现方法,非常实用的技巧,需要的朋友可以参考下
    2014-07-07
  • 微信支付开发订单查询实例

    微信支付开发订单查询实例

    本篇文章主要介绍微信支付中订单查询功能的实现,并提供代码实例,希望能帮助到微信支付开发的小伙伴
    2016-07-07
  • 使用composer 安装 laravel框架的方法图文详解

    使用composer 安装 laravel框架的方法图文详解

    这篇文章主要介绍了使用composer 安装 laravel框架的方法,结合图文说明的形式详细分析了composer 安装 laravel框架的具体步骤、相关命令与操作注意事项,需要的朋友可以参考下
    2019-08-08
  • Ubuntu下如何升级到PHP7.4的方法步骤

    Ubuntu下如何升级到PHP7.4的方法步骤

    这篇文章主要介绍了Ubuntu下如何升级到PHP7.4的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • wordpress安装过程中遇到中文乱码的处理方法

    wordpress安装过程中遇到中文乱码的处理方法

    这篇文章主要介绍了wordpress安装过程中遇到中文乱码的处理方法,是个人项目中遇到的一个奇葩事件,经过一番研究,终于解决,这里记录下来分享给大家,有需要的小伙伴可以参考下。
    2015-04-04
  • php 流程控制switch的简单实例

    php 流程控制switch的简单实例

    下面小编就为大家带来一篇php 流程控制switch的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • WordPress中用于获取文章作者与分类信息的方法整理

    WordPress中用于获取文章作者与分类信息的方法整理

    这篇文章主要介绍了WordPress中用于获取文章作者与分类信息的方法整理,都是来自于WordPress的WP_Query类之下,需要的朋友可以参考下
    2015-12-12

最新评论