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的输入输出流
Feb 14 PHP
php截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
PHP插入排序实现代码
Apr 04 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
php去除数组中为0的元素的实例分析
Nov 17 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
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
php类自动加载器实现方法
2015/07/28 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
PHP实现微信退款功能
2018/10/02 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
Python 的 Socket 编程
2015/03/24 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
python线程的几种创建方式详解
2019/08/29 Python
python关于变量名的基础知识点
2020/03/03 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
详解Python多线程下的list
2020/07/03 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
C语言中break与continue的区别
2012/07/12 面试题
介绍一下linux文件系统分配策略
2013/02/25 面试题
医院检讨书范文
2014/02/01 职场文书
道路交通安全实施方案
2014/03/12 职场文书
毕业生求职信
2014/06/10 职场文书
社区志愿者活动总结
2014/06/26 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2014年学校德育工作总结
2014/12/05 职场文书