PHP 的 Swoole 框架如何接入 Tars

总体思路

  • 在框架启动成功的时候,上报服务存活。

  • 使用框架或者swoole的定时器,实现每隔30s上报一次存活,可以在worker里面上报,也可以在task里面上报(注意:可能worker都挂了,task还在)。

  • 写一个入口文件(如index.php),根据Tars平台生成的PHP服务启停脚本,以及Tars平台下发的conf配置文件,完成PHP框架的配置转换(端口号、worker数量)和启停命令控制。

  • 对于HTTP的服务,实现上面3步就可以跑在Tars里面了。对于其他各种功能(查看框架简介),可以根据实际情况自行引入Tarsphp的composer扩展。

  • 对于tars或者pb等RPC协议的服务,需要解决网络协议与业务协议的打包及解包(可以参照tarsphp tcpserver),如果能定制实现代码自动生成,就更好了。

以swoft为例

  • 修改composer.json,加入phptars的包,以及打包命令。

{
    "require": {
        ...
        "phptars/tars-server": "~0.1",
        "phptars/tars-deploy": "~0.1",
        "phptars/tars2php": "~0.1",
        "phptars/tars-log": "~0.1",
        "ext-zip" : ">=0.0.1"
        ...
    },
    "scripts": {
        ...
        "deploy": "\\Tars\\deploy\\Deploy::run"
        ...
    }
}
  • 写一个用于调用Tars平台各种接口的class (src/app/Tars/Manage.php)

  • 在框架启动成功的时候,上报服务存活,这使用的swoft框架的事件监听Listener。 (src/app/Listener/APPStart.php)

  • 每隔30s上报一次存活,这里使用swoft框架的注解开启一个定时任务。 (src/app/Tasks/TarsKeepAliveTask.php)

  • 写一个入口文件,来控制swoft框架的启停。 (src/index.php)

ps:可以参考下面的提交记录 https://github.com/dpp2009/swoftInTars/commit/97459b5012f9d7542a2a31d936c65ad8637ee1a0#diff-efc7d6cbd3cc43b894698099b51a99ab

Last updated

Was this helpful?