zoukankan      html  css  js  c++  java
  • centos7下swoole1.9的安装与HttpServer的使用

    一、下载swoole源码包

    https://github.com/swoole/swoole-src/releases

    如:swoole-src-1.9.6.tar.gz

    二、编译安装

    > yum install gcc gcc-c++ kernel-devel make autoconf
    > tar xf swoole-src-1.9.6.tar.gz
    > cd swoole-src-1.9.6

    我的php是安装在/data/php56下,请自行修改

    > /data/php56/bin/phpize
    > ./configure
    > make && make install

    修改php.ini文件添加如下两行

    > vi /data/php56/lib/php.ini

    以下路径请根据自的环境修改

    extension_dir = "/data/php56/lib/php/extensions/no-debug-zts-20131226/"
    extension=swoole.so

    查看扩展是否装上

    > /data/php56/bin/php -m|grep swoole
    

      

    三、HttpServer的使用

    http.php代码如下:

    <?php
    $http = new swoole_http_server('0.0.0.0', 8888);
    //设置回调函数,当收到请求时,会回调此函数
    $http->on('request', function($request, $response) {
        //$request包含了客户端请求的信息
        var_dump($request);
        //$response服务端响应信息
        var_dump($response);
        //向客户端发送404状态码
        $response->status(404);
        //向客户端发送hello
        $response->end('hello');
    });
    //启动http服务
    $http->start();

    运行该脚本

    > /data/php56/bin/php http.php
    

      

    1、HttpServer如何处理静态文件?
    一般是分析客户端发送的请求信息,如果是一个文件,那么读取并发送给客户端,如果不是则返回404。

    <?php
    $http = new swoole_http_server('0.0.0.0', 8888);
    //设置回调函数,当收到请求时,会回调此函数
    $http->on('request', function($request, $response) {
        $pathInfo = $request->server['path_info'];
        $file = __DIR__ . $pathInfo;
        //获取文件的MIME
        $fileInfo = finfo_open(FILEINFO_MIME);
        $fileMime = finfo_file($fileInfo, $file);
    
        if(is_file($file)) {
            //这里需要手动设置文件MIME格式
            $response->header('Content-Type', $fileMime);
            $response->sendfile($file);
        } else {
            $response->status(404);
            $response->end('not found');
        }
    });
    //启动http服务
    $http->start();

    我们在http.php同目录下放上一张1.jpg图片,然后请求192.168.1.222:8888/1.jpg就可正常访问。


    2、HttpServer如何处理动态php文件?

    <?php
    $http = new swoole_http_server('0.0.0.0', 8888);
    //设置回调函数,当收到请求时,会回调此函数
    $http->on('request', function($request, $response) {
        $pathInfo = $request->server['path_info'];
        $file = __DIR__ . $pathInfo;
    
        if(is_file($file)) {
            //判断文件后缀名
            if(pathinfo($pathInfo)['extension'] == 'php') {
                ob_start();
                include $file;
                $content = ob_get_contents();
                ob_end_clean();
                $response->end($content);
            } else {
                //处理其他文件
            }
        } else {
            $response->status(404);
            $response->end('not found');
        }
    });
    //启动http服务
    $http->start();

    我们在http.php同目录下创建1.php脚本,然后请求192.168.1.222:8888/1.php就可正常访问。

    3、HttpServer的守护进程化?

    只需设置配置参数daemonize为1就可以了。

    <?php
    $http = new swoole_http_server('0.0.0.0', 8888);
    
    //设置进程数量,和守护进程化
    $http->set(array(
        'worker_num' => 4,
        'daemonize' => 1,
    ));
    
    //设置回调函数,当收到请求时,会回调此函数
    $http->on('request', function($request, $response) {
        $pathInfo = $request->server['path_info'];
        $file = __DIR__ . $pathInfo;
    
        if(is_file($file)) {
            //判断文件后缀名
            if(pathinfo($pathInfo)['extension'] == 'php') {
                ob_start();
                include $file;
                $content = ob_get_contents();
                ob_end_clean();
                $response->end($content);
            } else {
            
            }
        } else {
            $response->status(404);
            $response->end('not found');
        }
    });
    //启动http服务
    $http->start();
    

      

  • 相关阅读:
    包装类型
    int 和 Integer 有什么区别
    final finally finalize区别
    java关键字final 有什么用?
    String和StringBuffer、StringBuilder的区别是什么?
    String 类的常用方法都有那些?
    Vue官网教程-计算属性和监听器
    Vue官网教程-模板语法
    Vue官网教程-实例
    Vue官网教程-介绍
  • 原文地址:https://www.cnblogs.com/jkko123/p/6509976.html
Copyright © 2011-2022 走看看