介紹
公司重調組織架構後,我們小組被規劃為<基礎服務組>,主要工作內容是提供獨立的微服務供別人呼叫。諸如,傳送簡訊服務、垃圾過濾服務、心跳監測服務、異常捕獲服務等。這些微服務提供少量介面,有些甚至不需要資料層和快取層。這時候使用Lumen
都顯得臃腫更別提Laravel
了。而且線上環境強制使用composer
國外源,一次簡單升級就要耗費一上午時間。看過一些輕量級框架,對比選擇後,還是覺得Slim用起來順手點。有關Slim
各種吹逼的介紹及特性在這裡就不細說了,畢竟,每個框架都說自己是最牛逼的。魯迅說,沒有最好的框架,只有最適合業務場景的框架(老子沒說過這句話.jpg)。微框架使用Slim
核心元件並配合其它包組合而成,使用過程中可以自由組合自己熟悉的composer包。
Composer包
安裝
1. git clone -b master git@github.com:moext/moant.git
2. cd moant/
3. composer install -vvv
4. composer dump-autoload -o
5. cp .env.example .env
使用
路由
所有路由都定義在route
目錄下的api.php
檔案裡。示例:
use App\Controllers\TestController;
$app->any('/', TestController::class . ':test');
如上,定義路由用到控制器的時候,需要先把控制器類引入。
配置
在.env
檔案中配置連線mysql和redis。新建test
資料庫,在庫中新建users
表,插入幾條測試資料。
# 新建資料庫
create database test;
# 新建表
use test;
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 插入資料
INSERT INTO `users` (`id`, `username`, `password`)
VALUES
(1, '張三', '123'),
(2, '李四', '456');
示例
<?php
namespace App\Controllers;
use App\Services\DB;
use Slim\Http\Request;
use App\Services\Redis;
use Slim\Http\Response;
use App\Services\Logger;
class TestController
{
public function test(Request $request, Response $response)
{
$db = DB::getInstance();
$arrUser = $db->select('users', ['username']);
$redis = Redis::getInstance();
$redis->setex('redis_key', 3600, json_encode($arrUser));
Logger::add('name', [$request->getUri(), $request->getMethod(), $response->withJson('logger record success!')]);
echo '<h1 style="text-align: center; margin-top: 200px">';
echo 'Micro Framework';
echo '</h1>';
}
}
進入moant\public
目錄,執行php -S localhost:8080
,在瀏覽器訪問localhost:8080
,頁面會顯示Micro Framework
。同時,將DB查詢出的資料儲存到redis並把這次請求的輸入輸出在日誌檔案記錄。
通用方法
support
目錄下的helper.php
檔案裡定義一些通用函式。
ab壓測對比(僅供參考)
最近把小框架完善了下,並用它和Lumen做了次壓測對比。壓測資料不具說服力,僅供參考。使用同樣的方式,透過路由找到控制器然後在方法裡輸出一串字元。
電腦配置
Lumen壓測圖如下:
Slim-Framework壓測圖如下:
歡迎Star、提Issue
本作品採用《CC 協議》,轉載必須註明作者和本文連結