zoukankan      html  css  js  c++  java
  • PHP使用libevent实现高性能httpServer

    今天发现php也有一个libevent的扩展,安装后尝试下了一个webserver(httpserver), 发现性能还不错,逻辑很简单,每秒响应速度1800~4000次/s

    代码如下

    <?php
    $socket = stream_socket_server ('tcp://0.0.0.0:8888', $errno, $errstr);
    stream_set_blocking($socket, 0); // 设置 不阻塞
    $base = event_base_new();
    $event = event_new();
    event_set($event, $socket, EV_READ | EV_PERSIST, 'ev_accept', $base); // 监听端口
    event_base_set($event, $base);
    event_add($event);
    event_base_loop($base);
    
    function ev_accept($socket, $flag, $base) {
        static $i; 
        $connection = stream_socket_accept($socket); //和客户端建立连接
        stream_set_blocking($connection, 0);
       
        $buffer = event_buffer_new($connection, 'ev_read', NULL, 'ev_error',  $connection);  // 为这个连接添加I/O缓冲事件
        event_buffer_base_set($buffer, $base); 
        event_buffer_timeout_set($buffer, 30, 30); 
        event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff); //  
        event_buffer_priority_set($buffer, 10);
        event_buffer_enable($buffer, EV_READ | EV_PERSIST);
        echo $i++;
        echo "
    ";
        $GLOBALS['b'] = $buffer; //这个buffer一定要赋给个全局的变量 貌似是传值过程中的bug 或者5.3.8的闭包还是有问题?
    }
    
    
    function ev_error($buffer, $error, $connection) {
        event_buffer_disable($buffer, EV_READ | EV_WRITE);
        event_buffer_free($buffer);
        fclose($connection);
    }
    
    
    function ev_read($buffer, $connection) {    
    //      var_dump($connection);
        while ($read = event_buffer_read($buffer, 256)) {
           // var_dump($read);
        }
        fwrite($connection , date('Y-m-d H:i:s'));
        ev_error($buffer , '' , $connection);
    }

    只是简单的传输一个事件数据,没有遵守http协议, 貌似不太稳定,用浏览器反应会比较慢,期待进步一改进。

  • 相关阅读:
    sqlserver用windows方式验证登录踩过的坑
    jdk8对象集合转map集合
    监听程序当前无法识别连接描述符中请求的服务解决方案
    Java上传文件至SFTP服务器
    记一次学习kibaba踩过的坑(Windows环境)
    CSRF跨站请求伪造与XSS跨域脚本攻击讨论
    LVS简单搭建(一)
    LVS+keepalived简单搭建(二)
    JZ2440开发板学习 1. 刚接触开发板, 安装驱动
    用STM32CubeMX创建FreeRTOS项目
  • 原文地址:https://www.cnblogs.com/sailrancho/p/3400023.html
Copyright © 2011-2022 走看看