手把手教你5分鐘用 PHP 搭建一個高性能服務化後端框架

前言

一直以來,PHP 由於標準應用方式是配合 php-fpm 或 apache mod 使用,而被認爲不適合作服務化後端。可是隨着 Workerman 和 Swoole 這些常駐進程模塊的出現,PHP 其實早就已經合格。php

下面我就介紹如何用 PHP 來搭建一個高性能的服務化後端框架,而且實現一個客戶端調用例子。git

服務端

如今 PHP 圈子裏最流行的框架是 Laravel, Lumen 是它的精簡版,保留了 Container(依賴注入), artisan(命令行生成數據表)等優勢。github

服務端我使用的框架叫 Luke,Github 地址在這裏。Luke 是 Lumen 的非官方分支,在 Lumen 上層作了一層封裝,剝離了用於 http 的路由,同時引入 Workerman。算法

如今在你的工做目錄執行下面命令生成項目代碼apache

composer create-project luke/luke=dev-luke rpcserver
cd rpcserver

這時在 servers 目錄下有 http.php 和 jsonrpc.php 兩個文件,分別對應 http 服務 和 jsonrpc 服務。如今咱們進入 rpcserver/app/Http/Controllers,編輯文件 ExampleController.php,增長下面代碼json

public function show($name)
{
    return "Hello $name, this is Luke.";
}

這樣咱們服務端就已經搭建好了,如今回到 rpcserver 目錄,執行下面命令開啓服務後端

php servers/jsonrpc.php start

這時 console 會輸出架構

Workerman[servers/jsonrpc.php] start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.5.4          PHP version:7.2.1
------------------------ WORKERS -------------------------------
user          worker        listen                 processes status
simon         none          jsonNL://0.0.0.0:8000   1         [OK] 
----------------------------------------------------------------

表示服務正在正常運行。併發

本例子只給 Workerman 一個任務進程,更多設置和守護進程方式能夠查看 Workerman文檔app

客戶端

如今咱們回到項目根目錄,另開一個 console,輸入下面命令新建客戶端目錄,引入模塊

mkdir client
cd client
composer require luke/client

這時 vendor/luke/client 目錄下已經有了兩個文件 config.php 和 test.php,他們分別是配置和客戶端的例子。咱們無論他們,在項目目錄下新建 test.php 文件,輸入下面的代碼並保存

<?php
require 'vendor/autoload.php';
use Luke\Client;

$config = [
    'default' => [
        'hosts' => ['127.0.0.1:8000']
    ]
];

Client::config($config);
$client = Client::instance("Example");
$ret = $client->show('開發者');
var_dump($ret);

如今執行

php test.php

若是看到輸出

array(1) {
  'result' =>
  string(30) "Hello 開發者, this is Luke."
}

那麼恭喜你!你的 rpc 服務端和客戶端已經搭建好了。如今將它應用到正式項目中吧。

Workerman 與 Swoole

做爲 PHP 的常駐方案,兩個都很是優秀,而 Swoole 在社區的活躍度比 Workerman 高。但由於二者性能不分伯仲,並且 Workerman 是用純 PHP 開發,代碼更爲可控,所以 Luke 選擇了 Workerman。然而二者在調用方式很是接近,只要對代碼稍加修改就能改爲使用 Swoole。

Workerman 的併發性能能夠參考這裏

後記

在生產環境使用服務化架構,通訊部分除了協議外,還要注意加密。這部分 Luke 如今尚未提供,用戶能夠用簡單的加密算法本身實現。
當服務變多後,還須要添加自動發現的功能,這點在 Luke Client 的項目主頁提供了一些思路。

相關文章
相關標籤/搜索