这篇文章主要介绍了php使用event扩展的io复用测试的示例,帮助大家更好的理解和使用php,感兴趣的朋友可以了解下

先要安装event扩展,这样才可以使用libevent的事件机制

  1. pecl install event

测试代码

  1. //连接重用
  2. //创建资源流的上下文
  3. $context=stream_context_create([
  4. 'socket'=>[
  5. 'backlog'=>2000
  6. ]]);
  7. stream_context_set_option($context,'socket','so_reuseaddr',1); //设置连接重用
  8. //sock_set_option($this->server, SOL_SOCKET, SO_REUSEADDR, 1); //复用还处于 TIME_WAIT
  9. $socket = stream_socket_server("tcp://0.0.0.0:8070", $errno, $errstr,STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,$context);
  10. stream_set_blocking($socket,false);//非阻塞
  11. //绑定事件
  12. $base=new EventBase();
  13. //监听服务端的socket
  14. $event=new Event($base,$socket,Event::PERSIST |Event::READ | Event::WRITE,function ($socket)use(&$base){
  15. $client = stream_socket_accept($socket);
  16. //stream_set_blocking($client,false);//非阻塞
  17. // var_dump($client);
  18. // $content='21335435';
  19. // $string="HTTP/1.1 200 OK\r\n";
  20. // $string.="Content-Type: text/html;charset=utf-8\r\n";
  21. // $string.="Content-Length: ".strlen($content)."\r\n\r\n";
  22. // fwrite($client,$string.$content);
  23. // fclose($client);
  24. //global $base;
  25. //var_dump($socket,$client);
  26. $base=new EventBase();
  27. //监听客户端socket
  28. $event=new Event($base,$client,Event::PERSIST |Event::READ | Event::WRITE,function ($client){
  29. $msg=fread($client,65535);
  30. //
  31. // if($msg){ //匹配请求头包含了keep-alive
  32. //
  33. // }
  34. $content='hello world';
  35. $string="HTTP/1.1 200 OK\r\n";
  36. $string.="Content-Type: text/html;charset=utf-8\r\n";
  37. $string.="Connection: keep-alive\r\n";
  38. $string.="Content-Length: ".strlen($content)."\r\n\r\n";
  39. fwrite($client,$string.$content);
  40. fclose($client);
  41. //当socket断开连接,删除事件
  42. $event->del();//删除事件
  43. });
  44. $event->add(); //加入事件监听
  45. $base->loop();
  46. //监视客户端
  47. //$event->del();//删除事件
  48. });
  49. $event->add(); //加入事件监听
  50. var_dump($base->loop()); //调度挂起事件监听


更多相关文章

  1. Android(安卓)中 OnTouch事件的研究
  2. Android(安卓)onTouchEvent, onClick及onLongClick的调用机制
  3. Android输入系统概述
  4. Android(安卓)ViewDragHelper(1)
  5. Vue3使用Proxy实现数据监听的原因分析
  6. VUE的数据代理与事件详解
  7. Android触屏事件和MotionEvent详解
  8. Android(安卓)事件分发机制
  9. android 事件处理

随机推荐

  1. android的Notification折叠
  2. [ZZ]Android UI Automated Testing
  3. Android初小试---一分钟傻瓜式打包
  4. android studio 提示no android sdk foun
  5. Robotium Recorder的初试
  6. Android各种花式酷炫自定义控件开源库集
  7. 关于RelativeLayout的一点经验
  8. android 4.0 sdk直接下载地址
  9. UI
  10. andoid sys bug 转载