• 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协议, 貌似不太稳定,用浏览器反应会比较慢,期待进步一改进。

  • 相关阅读:
    leftpad填充函数;
    overfllow的解析
    append与after
    数组扁平话的N种解法;
    关于webapi调用wcf并发假死的分析
    C#金额数字转换中文繁体
    关于ios的IDFA
    Windows下为MySQL做定时备份
    [System.OutOfMemoryException] {函数求值已禁用,因为出现内存不足异常。
    mvc 捕获404和500 等
  • 原文地址:https://www.cnblogs.com/sailrancho/p/3400023.html
Copyright © 2020-2023  润新知