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 相关文章推荐
编译问题
Oct 09 PHP
一个简单的自动发送邮件系统(三)
Oct 09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
PHP在字符串中查找指定字符串并删除的代码
Oct 02 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
如何判断php数组的维度
Jun 10 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
PHP中的traits简单使用实例
May 13 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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 self,$this,const,static,->的使用
2009/10/22 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
php curl的深入解析
2013/06/02 PHP
jqPlot Option配置对象详解
2009/07/25 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
Angular设置别名alias的方法
2018/11/08 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python匹配中文的正则表达式
2016/05/11 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python调用c++传递数组的实例
2019/02/13 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
网站编辑求职信
2013/10/17 职场文书
《打电话》教学反思
2016/02/22 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL
python flappy bird小游戏分步实现流程
2022/02/15 Python
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS