tarsdocs
  • Readme.md
  • CLA
  • LICENSE
  • 基础介绍
    • 简介
    • 基础概念
    • 基础通信协议 Tars
    • 统一通信协议 Tup
    • 开发模式介绍
    • 模板配置
    • 服务市场
    • 服务扩展
    • 框架版本说明
  • 开源版框架介绍
    • 开源版本部署
      • 部署总体介绍
      • Docker环境安装
      • Mysql安装
      • 框架源码部署(Linux/Mac)
      • 框架源码部署(Windows)
      • 框架Docker部署
      • 框架节点部署
      • 业务服务容器化
      • 框架K8SDocker 部署
      • 框架K8STARS 部署
      • 框架K8SFramework 部署(强烈推荐)
      • 框架更新及扩容
      • 调用链升级注意事项
      • TarsWeb-v3.0.3升级说明
    • 开源版管理平台
      • TarsWeb说明
      • web用户体系
      • web管理平台 API
  • 企业版本介绍
    • 企业版说明
    • 框架集群化机制
    • 框架单节点机制
    • 使用二进制包部署
    • 使用容器部署
    • 业务服务一主多备机制
    • 命令行控制终端
    • IP-LIST级联缓存机制
    • 多数据中心管理
    • 多网络支持
    • 第三方服务管理
    • 数据产生和管理机制
    • 密码重置
    • TarsPython介绍
  • 框架关键特性
    • 业务配置
    • 服务监控
    • 无损发布/重启
    • 调用链
    • IDC分组
    • 鉴权功能
  • TarsCPP
    • 编译
    • 快速开发入门
    • 使用指南
    • 开发规范
    • 服务线程说明文档
    • protobuf 协议支持文档
    • 第三方协议支持
    • HTTP1 支持
    • HTTP2 支持
    • TLS 通信支持
    • Push 功能说明
    • PushCallback 功能说明
    • Cookie 支持
    • 队列模式
    • 手动绑定
    • 性能数据
    • 2.x 版本变化
    • 3.x 版本变化
    • 协程版本说明
    • 基础类库说明
    • [案例]
      • 框架快速入门
      • Http 服务示例
  • TarsJava
    • 快速开始
    • 快速开发入门
    • [使用指南]
      • Tars 服务开发与上线
      • HTTP 服务开发与上线
      • 生成接口调用文件
    • [性能测试]
      • tars java 压测代码
  • TarsGo
    • 基本介绍
    • 快速开始
    • 使用指南
    • cmake 管理代码
    • pb2tarsgo
    • 性能数据
    • 使用示例
  • TarsPHP
    • 搭建 php 环境
    • 快速开发入门
    • [快速起步]
      • 搭建 HttpServer
      • 搭建 TimerServer
      • 搭建 TcpServer
      • 搭建 WebSocketServer
      • 弹幕活动实战
    • [框架简介]
      • 简介
      • tars-server
      • tars-client
      • tars-config
      • tars-deploy
      • tars-extension
      • tars-log
      • tars-monitor
      • tars-registry
      • tars-report
      • tars-utils
      • tars2php
    • [高阶应用]
      • PHP 的 Swoole 框架如何接入 Tars
      • 与 thinkphp 结合使用
      • 与 Swoft 结合使用
      • 与 Laravel 结合使用
      • 与 Yii2 结合使用
      • 持续集成方案
    • [其他]
      • 常见问题
      • 如何 Debug
      • changelog
      • 其他外部文档
  • Tars.js
    • 基本介绍
    • 脚手架
    • 快速开发入门
    • @tars/stream
    • @tars/rpc
    • @tars/logs
    • @tars/config
    • @tars/monitor
    • @tars/notify
    • @tars/utils
    • @tars/dyeing
    • @tars/node-agent
    • @tars/winston-tars
    • tars2node
  • K8SFramework
    • [安装和使用说明]
      • 介绍
      • 特性
      • 安装
      • 升级
      • 云原生运维
      • 管理平台
      • 证书
    • [开发环境构建]
      • Dockerfile 说明
      • 服务发布流程说明
      • 制作基础编译镜像
      • 制作业务服务镜像
      • 制作 Helm 包
      • 发布业务镜像到 K8S 集群
      • 服务发布示例
      • 如何调试业务服务
  • 服务扩展
    • 云告警
    • 接口及压测工具
    • 网关服务
    • dcache缓存服务
    • 发送邮件服务
    • 一致性存储服务
    • 一致性存储web管理平台
    • 唯一计数服务
  • 常见问题
    • 安装常见问题
    • Issues
    • Issues-tarscpp
    • Issues-tarsjava
    • Issues-tarsgo
    • Issues-tarsphp
  • 开源合作
    • TarsFramework 项目 Git 合作规范
  • 直播视频
    • B 站 TARS 培训系列课程
  • 相关文章
    • TARS 技术文章
  • 其它资源分享
    • 下载
    • Tars 介绍.pptx
    • TarsPHP 解密.pdf
    • TarsJava 本地调试.pdf
    • 微服务在腾讯的业务实践.pptx
Powered by GitBook
On this page
  • 简介
  • 使用说明

Was this helpful?

  1. TarsPHP
  2. [框架简介]

tars2php

简介

tars2php主要功能是通过tars协议文件,自动生成client端和server端php代码,方便大家使用。(server端主要为框架代码,实际业务逻辑需要自己补充实现)

使用说明

如果用户只有使用打包解包需求的,那么使用流程如下:

  1. 准备一份tars协议文件,例如example.tars

  2. 编写一个tars.proto.php文件,这是用来生成代码的配置文件。

    //本范例的servant name为PHPTest.PHPServer.obj    
    return array(    
        'appName' => 'PHPTest', //tars服务servant name 的第一部分    
        'serverName' => 'PHPServer', //tars服务servant name 的第二部分    
        'objName' => 'obj', //tars服务servant name 的第三部分    
        'withServant' => true,//决定是服务端,还是客户端的自动生成    
        'tarsFiles' => array(    
            './example.tars' //tars文件的地址    
        ),    
        'dstPath' => './server/', //生成php文件的位置    
        'namespacePrefix' => 'Server\servant', //生成php文件的命名空间前缀 );    
  3. 执行php ./tars2php.php ./tars.proto.php

  4. 工具会根据servant name自动生成三级目录结构,demo中会在./server目录下生成PHPTest/PHPServer/obj/目录,obj目录下的classers是struct对应的php对象,tars目录是tars协议文件本身。 如example.tars中的struct:

    struct SimpleStruct {    
        0 require long id=0;    
        1 require unsigned int count=0;    
        2 require short page=0;    
    };    

    转变成classes/SimpleStruct.php

    <?php    
        
    namespace Server\servant\PHPTest\PHPServer\obj\classes;    
        
    class SimpleStruct extends \TARS_Struct {    
       const ID = 0; //tars协议中的tag    
       const COUNT = 1;    
       const PAGE = 2;    
           
       public $id; //元素的实际值    
       public $count;     
       public $page;     
           
       protected static $_fields = array(    
          self::ID => array(    
             'name'=>'id', //tars协议中没个元素的name    
             'required'=>true, //tars协议中是require或者optional    
             'type'=>\TARS::INT64, //类型    
             ),    
          self::COUNT => array(    
             'name'=>'count',    
             'required'=>true,    
             'type'=>\TARS::UINT32,    
             ),    
          self::PAGE => array(    
             'name'=>'page',    
             'required'=>true,    
             'type'=>\TARS::SHORT,    
             ),    
       );    
        
       public function __construct() {    
          parent::__construct('PHPTest_PHPServer_obj_SimpleStruct', self::$_fields);    
       }    
    }    
  5. 以example.tars中的interface部分会自动生成单独的已interface命名的php文件。 例如int testLofofTags(LotofTags tags, out LotofTags outtags);接口生成的方法如下

    • server部分

    <?php  
        //注意生成文件中的注释部分会在server启动的时候转换为php代码,如非必要,请勿修改.    
        //server部分具体实现需要自己继承完成,注释说明依次如下    
        //参数为struct类型,对应$tags变量,对应的php对象在\Server\servant\PHPTest\PHPServer\obj\classes\LotofTags    
        //参数为struct类型,对应$outtags变量,对应的php对象在\Server\servant\PHPTest\PHPServer\obj\classes\LotofTags,是输出参数    
        //接口防止为int    
       /**    
        * @param struct $tags \Server\servant\PHPTest\PHPServer\obj\classes\LotofTags    
        * @param struct $outtags \Server\servant\PHPTest\PHPServer\obj\classes\LotofTags =out=    
        * @return int     
        */    
       public function testLofofTags(LotofTags $tags,LotofTags &$outtags);    
    • client部分

    <?php  
       try {    
          $requestPacket = new RequestPacket(); //构建请求包需要的参数    
          $requestPacket->_iVersion = $this->_iVersion;    
          $requestPacket->_funcName = __FUNCTION__;    
          $requestPacket->_servantName = $this->_servantName;    
              
          $encodeBufs = [];    
        
          $__buffer = TUPAPIWrapper::putStruct("tags",1,$tags,$this->_iVersion); //打包第一个参数tags    
          $encodeBufs['tags'] = $__buffer;    
              
          $requestPacket->_encodeBufs = $encodeBufs; //在请求包中设置请求bufs    
        
          $sBuffer = $this->_communicator->invoke($requestPacket,$this->_iTimeout); //发送请求包,接收返回包    
        
          $ret = TUPAPIWrapper::getStruct("outtags",2,$outtags,$sBuffer,$this->_iVersion); //从返回包中解出第一个输出参数outtags    
          return TUPAPIWrapper::getInt32("",0,$sBuffer,$this->_iVersion); //解出返回参数 返回参数 name是空,tag为0    
        
       }    
       catch (\Exception $e) {    
          throw $e;    
       }    
Previoustars-utilsNext[高阶应用]

Last updated 3 years ago

Was this helpful?