自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ThinkPHP8框架集成Swoole實(shí)現(xiàn)高性能RPC服務(wù)

開發(fā) 前端
由于Swoole?服務(wù)運(yùn)行過程中 PHP 文件是常駐內(nèi)存運(yùn)行的,這樣可以避免重復(fù)讀取磁盤、重復(fù)解釋編譯 PHP,以便達(dá)到最高性能。所以更改業(yè)務(wù)代碼后必須手動(dòng)reload?或者restart才能生效。

介紹

RPC 即遠(yuǎn)程過程調(diào)用(Remote Procedure Call),是一種分布式計(jì)算技術(shù),允許一個(gè)程序在不同的計(jì)算機(jī)上調(diào)用另一個(gè)程序的函數(shù)或方法,就像調(diào)用本地程序中的函數(shù)一樣簡(jiǎn)單。RPC 隱藏了底層網(wǎng)絡(luò)通信的細(xì)節(jié),使得開發(fā)者能夠像處理本地調(diào)用一樣處理遠(yuǎn)程調(diào)用。

圖片

分布式調(diào)用

解決分布式系統(tǒng)中,服務(wù)之間的調(diào)用問題。遠(yuǎn)程調(diào)用時(shí),要能夠像本地調(diào)用一樣方便,讓調(diào)用者感知不到遠(yuǎn)程調(diào)用的邏輯。節(jié)點(diǎn)角色:

  • Server: 暴露服務(wù)的服務(wù)提供方
  • Client: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方
  • Registry: 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心

Think-Swoole 中已經(jīng)實(shí)現(xiàn)了的基于 TCP 的 PRC,這樣我們使用傳統(tǒng)型框架也可以做簡(jiǎn)單的分布式架構(gòu)應(yīng)用了。

PHP 擴(kuò)展安裝

  • 已經(jīng)編譯安裝 Swoole 擴(kuò)展
  • 不能安裝 Xdebug 擴(kuò)展

依賴包安裝

composer require topthink/think-swoole

安裝完成后會(huì)在項(xiàng)目 config 配置目錄生成 swoole 配置文件 swoole.php

服務(wù)端

以下配置都是在config/swoole.php 配置文件中配置

HTTP 服務(wù)配置

圖片圖片

開啟 RPC 并注冊(cè)服務(wù)

1、配置

圖片圖片

2、定義 RPC 接口抽象方法

圖片

3、定義 RPC 服務(wù)類,繼承 RPC 接口

<?php

declare(strict_types=1);

namespace app\rpc\service;

use app\rpc\contracts\UserInterface;

class UserSerivce implements UserInterface
{
    public function add($name)
    {
        return "【修改】你添加名稱是:" . $name;
    }

    public function list()
    {
        return "list";
    }
}

為什么一定要寫 interface,不直接實(shí)現(xiàn)功能?

think\swoole\rpc\server\Dispatcher下prepareServices方法看下就懂 (系統(tǒng)定義就必須要這么寫) 自我理解 這么寫的好處 大型項(xiàng)目經(jīng)理直接寫完下面實(shí)現(xiàn)。

開啟服務(wù)(服務(wù)端)

# php think swoole start
Starting swoole http server...
Swoole http server started: <http://0.0.0.0:8787>
You can exit with `CTRL-C`

客戶端

以下配置都是在config/swoole.php 配置文件中配置

HTTP 服務(wù)配置

圖片圖片

配置 RPC 文件配置服務(wù)端連接信息

1、配置文件

圖片圖片

2、執(zhí)行命令生成 RPC 服務(wù)接口

php think rpc:interface

以上命令執(zhí)行成功后,會(huì)在項(xiàng)目 app 下生成一個(gè)rpc.php的文件,它就是 RPC 服務(wù)接口調(diào)用文件了。rpc.php 文件內(nèi)容

<?php

/**
 * This file is auto-generated.
 */

declare(strict_types=1);

namespace rpc\contract\userservice;

interface UserInterface
{
 public function add($name);

 public function list();
}
return ['userservice' => ['rpc\contract\userservice\UserInterface']];

注意看下最后的 return 中,就是每個(gè)服務(wù)接口的命名空間了;在控制器中使用該命名空間實(shí)例對(duì)象就可以調(diào)用

3、實(shí)際調(diào)用過程

圖片圖片

參考代碼

use rpc\contract\userservice\UserInterface;
...
public function rpctest(UserInterface $userInterface)
{
 return $userInterface->add('Tinywan');
}

4、客戶端請(qǐng)求訪問

圖片圖片

熱更新

由于Swoole服務(wù)運(yùn)行過程中 PHP 文件是常駐內(nèi)存運(yùn)行的,這樣可以避免重復(fù)讀取磁盤、重復(fù)解釋編譯 PHP,以便達(dá)到最高性能。所以更改業(yè)務(wù)代碼后必須手動(dòng)reload或者restart才能生效。

think-swoole擴(kuò)展提供了熱更新功能,在檢測(cè)到相關(guān)目錄的文件有更新后會(huì)自動(dòng)reload,從而不需要手動(dòng)進(jìn)行reload操作,方便開發(fā)調(diào)試。

如果你的應(yīng)用開啟了調(diào)試模式,默認(rèn)是開啟熱更新的。原則上,在部署模式下不建議開啟文件監(jiān)控,一方面有性能損耗,另外一方面對(duì)文件所做的任何修改都需要確認(rèn)無誤才能進(jìn)行更新部署。

熱更新的默認(rèn)配置如下:

當(dāng)我們?cè)趹?yīng)用的根目錄下定義一個(gè)特殊的.env環(huán)境變量文件,里面設(shè)置了APP_DEBUG = true會(huì)默認(rèn)開啟熱更新,你也可以直接把enable設(shè)置為 true。

錯(cuò)誤

錯(cuò)誤一 與 xdebug 沖突

Swoole\Server::start(): Using Xdebug in coroutines is extremely dangerous

php 擴(kuò)展 xdebug 和 easyswoole 沖突,報(bào)警告,此時(shí)需要禁用 php 的 xdebug 擴(kuò)展即可

責(zé)任編輯:武曉燕 來源: 開源技術(shù)小棧
相關(guān)推薦

2022-08-15 08:01:35

微服務(wù)框架RPC

2020-10-13 18:09:22

開發(fā)框架開源

2019-07-31 14:36:46

Linux服務(wù)器框架

2024-02-26 07:43:10

大語言模型LLM推理框架

2015-03-02 14:00:54

2011-12-28 15:26:16

Spring\Dubb

2024-07-05 09:41:42

2024-12-25 14:03:03

2020-06-17 16:43:40

網(wǎng)絡(luò)IO框架

2023-10-31 18:52:29

網(wǎng)絡(luò)框架XDP技術(shù)

2024-11-01 11:46:59

2023-05-18 08:47:42

2015-08-13 09:58:09

HproseNode.js

2011-02-17 09:45:40

云計(jì)算RPC框架

2024-01-02 12:17:44

Go傳統(tǒng)遠(yuǎn)程

2018-02-28 10:11:50

騰訊框架開源

2024-12-24 10:50:05

GinWeb開發(fā)

2022-05-17 17:18:40

Kite字節(jié)跳動(dòng)微服務(wù)框架

2020-11-10 07:46:09

服務(wù)器高并發(fā)高性能

2022-01-07 06:12:08

RPC框架限流
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)