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 相关文章推荐
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
php压缩和解压缩字符串的方法
Mar 14 PHP
PHP获取数组最大值下标的方法
May 12 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
php封装的page分页类完整实例
Oct 18 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
TP5框架实现的数据库备份功能示例
Apr 05 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函数(ignore_user_abort)
2012/08/01 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
Python构建网页爬虫原理分析
2017/12/19 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
django之自定义软删除Model的方法
2019/08/14 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
pycharm实现猜数游戏
2020/12/07 Python
Intersport西班牙:在线体育商店
2019/11/06 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
厨房工作人员岗位职责
2013/11/15 职场文书
行政主管岗位职责
2013/11/18 职场文书
共产党员公开承诺书
2014/03/25 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
个人总结怎么写
2015/02/26 职场文书
离婚被告答辩状
2015/05/22 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技