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出错界面
Oct 09 PHP
PHP4实际应用经验篇(9)
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php Undefined index和Undefined variable的解决方法
Mar 27 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
php简单操作mysql数据库的类
Apr 16 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
PHP yield关键字功能与用法分析
Jan 03 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
php中OR与|| AND与&&的区别总结
2013/10/26 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python中的pack和unpack的使用
2018/03/12 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
2014年应届大学生自我评价
2014/01/09 职场文书
个人查摆剖析材料
2014/02/04 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle