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与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php实现加减法验证码代码
Feb 14 PHP
php rsa加密解密使用详解
Jan 14 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
PHP时间和日期函数详解
May 08 PHP
正确的PHP匹配UTF-8中文的正则表达式
May 13 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
实例详解Python装饰器与闭包
2019/07/29 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
制衣厂各岗位职责
2013/12/02 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
行政主管职责范本
2014/03/07 职场文书
停课通知书
2015/04/24 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
一文解答什么是MySQL的回表
2022/08/05 MySQL