hyperf簡介
2.0 介紹
hyperf 是基於 swoole 4.5+ 實現的高效能、高靈活性的 php 協程框架,內建協程伺服器及大量常用的元件,效能較傳統基於 php-fpm 的框架有質的提公升,提供超高效能的同時,也保持著極其靈活的可擴充套件性,標準元件均基於 psr 標準 實現,基於強大的依賴注入設計,保證了絕大部分元件或類都是 可替換 與 可復用 的。
框架元件庫除了常見的協程版的 mysql 客戶端、redis 客戶端,還為您準備了協程版的 eloquent orm、websocket 服務端及客戶端、json rpc 服務端及客戶端、grpc 服務端及客戶端、zipkin/jaeger (opentracing) 客戶端、guzzle http 客戶端、elasticsearch 客戶端、consul 客戶端、etcd 客戶端、amqp 元件、apollo 配置中心、阿里雲 acm 應用配置管理、etcd 配置中心、基於令牌桶演算法的限流器、通用連線池、熔斷器、swagger 文件生成、swoole tracker、檢視引擎、snowflake 全域性 id 生成器 等元件,省去了自己實現對應協程版本的麻煩。
hyperf 還提供了 基於 psr-11 的依賴注入容器、註解、aop 面向切面程式設計、基於 psr-15 的中介軟體、自定義程序、基於 psr-14 的事件管理器、redis/rabbitmq 訊息佇列、自動模型快取、基於 psr-16 的快取、crontab 秒級定時任務、國際化、validation 表單驗證器 等非常便捷的功能,滿足豐富的技術場景和業務場景,開箱即用。
1.單例模式(singleton)
模式定義
簡單說來,單例模式的作用就是保證在整個應用程式的生命週期中,任何乙個時刻,單例類的例項都只存在乙個,同時這個類還必須提供乙個訪問該類的全域性訪問點。 常見使用例項:資料庫聯結器;日誌記錄器(如果有多種用途使用多例模式);鎖定檔案。
uml類圖
單例模式類圖
**示例:
hyperf中的單例模式
在傳統的 php-fpm 的框架裡,會習慣提供乙個 abstractcontroller 或其它命名的 controller 抽象父類,然後定義的 controller 需要繼承它用於獲取一些請求資料或進行一些返回操作,在 hyperf 裡是 不能這樣做 的,因為在 hyperf 內絕大部分的物件包括 controller 都是以 單例(singleton) 形式存在的,這也是為了更好的復用物件,而對於與請求相關的資料在協程下也是需要儲存到 協程上下文(context) 內的,所以在編寫**時請務必注意 不要 將單個請求相關的資料儲存在類屬性內,包括非靜態屬性。
2.簡單工廠模式(****** factory)
模式定義
簡單工廠的作用是例項化物件,而不需要客戶了解這個物件屬於哪個具體的子類。簡單工廠例項化的類具有相同的介面或者基類,在子模擬較固定並不需要擴充套件時,可以使用簡單工廠。
uml類圖
**示例:
hyperf中的簡單工廠模式
hyperf中server的建立由類serve***ctory完成,通過配置引數建立http_server或websocket_server等。**如下:hyperf\server\serve***ctory
namespace
hyperf\server
;use
hyperf\server\entry\eventdispatcher
;use
hyperf\server\entry\logger
;use
psr\container\containerinte***ce
;use
psr\eventdispatcher\eventdispatcherinte***ce
;use
psr\log\loggerinte***ce
;class
serve***ctory
public
function
configure
(array
$config
)public
function
start()
public
function
getserver()
: serverinte***ce
return
$this
->
server;}
public
function
setserver
(server $server
): self
public
function
geteventdispatcher()
: eventdispatcherinte***ce
return
$this
->
getdefaulteventdispatcher()
;}public
function
seteventdispatcher
(eventdispatcherinte***ce $eventdispatcher
): self
public
function
getlogger()
: loggerinte***ce
return
$this
->
getdefaultlogger()
;}public
function
setlogger
(loggerinte***ce $logger
): self
private
function
getdefaulteventdispatcher()
: eventdispatcher
private
function
getdefaultlogger()
: logger
}
spring中的設計模式(一)
在專案開發中,由a方先提供api介面,b方呼叫 此時a方將自己的實現類實現api介面 b方同時也編寫實現類實現api介面,但不需要真的實現介面中的邏輯,只需呼叫父介面中的方法即可 圖 這時暴露出來的只有介面api和 類b,b提供了其他物件呼叫a的 b裡面具有對實現類a的方法的控制權,可以控制他什麼時...
spring中的設計模式(一)
在專案開發中,由a方先提供api介面,b方呼叫 此時a方將自己的實現類實現api介面 b方同時也編寫實現類實現api介面,但不需要真的實現介面中的邏輯,只需呼叫父介面中的方法即可 圖 這時暴露出來的只有介面api和 類b,b提供了其他物件呼叫a的 b裡面具有對實現類a的方法的控制權,可以控制他什麼時...
Spring中的設計模式(一) 工廠模式
場景 以牛奶為例,有蒙牛 伊利 愛慕希等品牌。public inte ce milk 產品實現介面 public class menniu implements milk public class aimuxi implements milk public class yili implements...