热搜: 分页类  PHP  Windows补丁  验证码  Jpgraph  替换  收机  windows7  Swift  Laravel 
  • 首 页
  •  
     
    当前位置: 首页 » 编程语言 » PHP教程 » 正文

    ysapi:由 Swoole + yaf 实现 socket 服务基础框架

    放大字体  缩小字体 发布日期:2017-02-05  浏览次数:658
    核心提示:ysapi简介 ysapi是一个由 swoole + yaf 实现socket服务基础框架. 由swoole实现socket服务,对外提供API接口, yaf负责api对应的业务逻辑.功能介绍 基于socket提供更快的数据返回 基于swoole多进程task模型,实现多任务并行处理 客户端单次调用,服务端自动拆分任

    ysapi

    简介

    • ysapi是一个由 swoole + yaf 实现socket服务基础框架.
    • 由swoole实现socket服务,对外提供API接口, yaf负责api对应的业务逻辑.

    功能介绍

    • 基于socket提供更快的数据返回
    • 基于swoole多进程task模型,实现多任务并行处理
    • 客户端单次调用,服务端自动拆分任务给多个task进程并发处理,并一次返回给客户端
    • 每次调用生成唯一ID,此ID可把当次所有请求,任务串联起来,依此分析程序问题
    • DB, REDIS, MQ均长连接常驻,减少网络IO
    • 基于yaf,提供可靠,快速,简单的业务开发
    • 基于MQ异步收集请求日志(这个是可选的)
    • 这是一个裸的,基础的,可以在这基础上修改成适合自己业务的服务.

    主要解决的问题

    • 基于swoole开发servers时,每次修改业务代码,或调试,都要重启整个服务或reload,才能看到调试信息或结果
    • 这种开发体验是很难受的,很影响工作效率.
    • 那能不能像传统开发一样,用浏览器来调试业务逻辑呢?
    • 每次只用修改->保存->刷新浏览器就能看到调试信息和结果,和以往的工作方式一样.
    • 答案是肯定的.
    • 基于yaf的特点,很方便的实现.
    • 当业务逻辑实现以后,只要发布或重启servers即可.

    安装

    必要的扩展

    • nginx
    • mysql 5.7
    • PHP 7.1
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/yaf.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/yaconf.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/swoole.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/msgpack.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/amqp.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/igbinary.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/redis.so
    • extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/don keyid.so

    php.ini扩展配置

    [Don
    keyId]
    ;0-4095
    don
    keyid.node_id=0
    ;0-Timestamp
    don
    keyid.epoch=0
    
    [yaconf]
    yaconf.directory=/tmp/yaconf
    ; yaconf.check_delay=0
    
    [yaf]
    yaf.environ = product           ; develop test
    yaf.use_namespace = 1
    ; yaf.action_prefer = 0
    ; yaf.lowcase_path = 0
    ; yaf.library = NULL
    ; yaf.cache_config = 0
    ; yaf.name_suffix = 1
    ; yaf.name_separator = ""
    ; yaf.forward_limit = 5
    ; yaf.use_spl_autoload = 0

    代码安装

    把文件放到

    /wwwroot/data_site/ysapi

    nginx.conf配置

    server {
            listen       80;
            server_name  api.local.com;
            index index.html index.htm index.php;
            root /wwwroot/data_site/ysapi/service;
    
            if (!-e $request_filename) {
                    rewrite ^/(.*)  /index.php/$1 last;
            }
    
            location / {
                    try_files $uri $uri/ /index.php?$query_string;
            }
    
            location ~ \.php$ {
                    fastcgi_pass  127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include       fastcgi_params;
            }
        }
    • 重启Nginx,修改本机host文件
    127.0.0.1 api.local.com

    浏览器访问

    • 保存后,重启浏览器打开(以下是yaf默认路由方式):
    http://api.local.com/index/index/index/data/def
    
    http://api.local.com/ index/  index/  index/ data/def
                    域名/  模块/ 控制器/  方法 / 参数/值

    若无问题,将看到: ysapi:由 Swoole + yaf 实现 socket 服务基础框架

    之后就可以按yaf的方式开发API业务逻辑

    启动 servers

    业务代码开发完成后,我们可以reload或重启servers,来提供最新的接口

    php /wwwroot/data_site/ysapi/run.php

    服务启动无异常,可以使用api调用方法来尝试调用:

    php /wwwroot/data_site/ysapi/call.php

    客户端接口调用代码用例

    • 用例中我们同时调用3个接口获得不同的数据
    try {
        $api = new apicall();
        $api->add('pagelist','index/index/index',['page'=>1]);
        $api->add('user','index/index/index2',['user'=>1]);
        $api->add('mess','index/index/index3',['mess'=>1]);
        $rs=$api->exec('www');
        $code=$rs['code'];
        if($code!=200){
            if($code==500){
                // 全错
            }elseif($code==300){
                // 部份错
            }else{
                // 异常
            }
        }
    
        $pagelist=$rs['pagelist'];
        $user=$rs['user'];
        $mess=$rs['mess'];
    
        echo(print_r($pagelist,1));
    }catch (Exception $e){
        echo $e->getMessage().PHP_EOL;
        die('ERROR-------------------------------'.PHP_EOL);
    }

    业务开发

    • 按照YAF的方式去开发接口业务逻辑
    • 新建模块->建控制器->建方法->浏览器访问你的方法进行调试
    • 方法传入的参数可到/_data/模块/控制器文件中定义,如:
    // /ysapi/_data/Index/Index.php
    // 路径及名字按YAF的方式定义
    class IndexData{
        public static $indexAction=[
            'def'=>[
                'page'=>1
            ],
            'p1'=>[
                'page'=>1
            ],
            'p2'=>[
                'page'=>2
            ],
        ];
    
        public static $index2Action=[
            'def'=>[
                'id'=>1
            ],
            'u1'=>[
                'id'=>1
            ],
            'u2'=>[
                'id'=>2
            ],
        ];
    
        public static $index3Action=[
            'def'=>[
                'id'=>1
            ],
            'm1'=>[
                'id'=>1
            ],
            'm2'=>[
                'id'=>2
            ],
        ];
    
    // http://api.local.com/index/index/index3/
    // http://api.local.com/index/index/index3/data/def
    // http://api.local.com/index/index/index3/data/m1
    // http://api.local.com/index/index/index3/data/m2
    


    小编为您推荐“ysapi:由 Swoole + yaf 实现 socket 服务基础框架”相关文章

    PHP获取文件夹大小函数用法实例
    这篇文章主要介绍了PHP获取文件夹大小函数用法,实例分析了php针对文件夹操作的相关技巧,需要的朋友可以参考下

    C#实现修改系统时间的方法
    这篇文章主要介绍了C#实现修改系统时间的方法,是一个非常实用的功能,需要的朋友可以参考下

    fleaphp crud操作之find函数的使用方法
    fleaphp crud操作之find函数的用法,需要的朋友可以参考下。

    php生成xml简单实例代码
    使用PHP DOMDocument创建动态XML文件

    C#算法之全排列递归算法实例讲解
    这篇文章主要介绍了C#算法之全排列递归算法实例讲解,本文讲解了算法思路、算法代码实例、解决重复元素的排列问题等内容,需要的朋友可以参考下

     
    TAGS: Yaf Swoole
     
     
    猜你想看
     
    更多..
    与本文有关Yaf
    • PHP框架之Yaf框架初探 | 司马他
      框架的存在主要意义就是提高程序员的开发效率,同时也带来性能上的一部分损失。当前开发面向对象已经成为主流,同时为了规范开发使用MVC模式已经成为了一种趋势,当前市面上的框架非常之多,大部分也是MVC模式,但是相对来说对于PHP性能都一定的损失。那么有
      02-05 关键词:Yaf
    • Yaf Nginx with php-fpm socket
      Nginx+Php-fpm socket+Yaf折腾了很久Yaf+Nginx在php-fpm的socket模式下的配置,总结如下:PHP设置为了在nginx下使用,Php需要使用fix path info。打开php配置,加上如下配置:cgi.fix_pathinfo=1Nginx设置Nginx下的Server节点中配置如下:if (!-e $request_fil
      10-31 关键词:NginxSocket
    • Yaf + Eloquent DB::raw
      在Yaf框架中引入Laravel的Eloquent作为数据库的ORM。在使用中会遇到需要使用raw方法来进行查询的问题。比如使用select语句count所有账单金额。而DB::raw()是Laravel注册的方法,在Yaf框架中并不能使用。其解决方法有二:Expression因为DB::raw()本质上是Illum
      09-14 关键词:Yaf
    • Windows和Linux上安装php7并安装yaf
      Windows和Linux上安装php7并安装yafwindows1.windows上安装 php7 alpha 只需要从官网上 http://windows.php.net/qa/ 下载然后直接配置就可以,如果你不会你可以下载 PHP Manager,直接配置就可以了。这个时候需要测试,打开命令行窗口,然后到你的 php7 目录
      08-30 关键词:PHP7Yaf
    • PHP Yaf框架的简单安装使用教程(推荐)
      下面小编就为大家带来一篇PHP Yaf框架的简单安装使用教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
      06-20 关键词:yaf框架安装
    • PHP扩展框架之Yaf框架的安装与使用
      这篇文章主要介绍了PHP扩展框架之Yaf框架的安装与使用的相关资料,具有参考借鉴价值,需要的朋友可以参考下
    • ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
      这篇文章主要介绍了ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼的相关资料,需要的朋友可以参考下
      07-11 关键词:ThinkPHPZF2YafLaravel路由
     
    相关评论
     
    猜你喜欢
     
    网站首页 | 关于我们 | 联系方式 | 使用协议 | 版权隐私 | 网站地图 | 网站留言