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 相关文章推荐
pw的一个放后门的方法分析
Oct 08 PHP
php开发工具之vs2005图解
Jan 12 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
PHP防盗链代码实例
Aug 27 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
php nginx 实时输出的简单实现方法
Jan 21 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自定义hash函数实例
2015/05/05 PHP
nginx下安装php7+php5
2016/07/31 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
2019/01/19 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Python转码问题的解决方法
2008/10/07 Python
python 判断一个进程是否存在
2009/04/09 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
python基于ID3思想的决策树
2018/01/03 Python
使用Python更换外网IP的方法
2018/07/09 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
python如何实现图片压缩
2020/09/11 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
内业资料员岗位职责
2014/01/04 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
运动会口号大全
2014/06/07 职场文书
读群众路线的心得体会
2014/09/03 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
2015年财政局工作总结
2015/05/21 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
2015年暑假工作总结
2015/07/13 职场文书