国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP程序員簡單的開展服務治理架構操作詳解(一)

PHP程序員簡單的開展服務治理架構操作詳解(一)

2020-06-23 13:49CrazyCodes PHP教程

這篇文章主要介紹了PHP程序員簡單的開展服務治理架構操作,結合實例形式詳細分析了PHP開展服務治理架構操作相關原理、RPC通信實現技巧與注意事項,需要的朋友可以參考下

本文實例講述了PHP程序員簡單的開展服務治理架構操作。分享給大家供大家參考,具體如下:

不涉及其他的語言及工具,我們從PHP本身來談如何實現服務治理

本猿人已經寫好的服務治理 https://github.com/CrazyCodes/Service-Govern.git

 

治理什么?

 

這個專業名詞很容易發現治理的是服務,而服務則是我們的項目。管理這些服務方案則叫服務治理。

現在在Server上有四項服務,分別為

  • UserService
  • ShopService
  • GoodsService
  • LiveService

這些服務我們叫它服務提供者(既提供對內服務的應用)

調用服務的應用我們稱它為服務消費者,例如

  • User-Api
  • Shop-Api
  • Goods-Api
  • Live-Api

Service 是對內服務的而Api是對外服務的

PHP程序員簡單的開展服務治理架構操作詳解(一)

服務治理考慮的問題就是如何管理這四項服務,讓它們如何對外服務,如何監控服務進程

 

依托實現

 

在實現服務治理之前,需要了解以下幾塊知識點

  • thrift
  • rpc
  • swoole

 

thrift

暫時大可理解為可以通過它去調用其他開發語言的方法

 

rpc

RPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。

服務與服務之間通信可以通過RPC通信,當然也可以選擇UDP等

 

swoole

PHP圈內跨世紀的產物,使用他的原因是因為Swoole本身支持RPC通信,所以我們本章通過Swoole Rpc的方法去實現消費者與服務提供者之間的通信

 

實現RPC通信

 

服務治理非常重要的一個環節,要在無感知的情況讓消費者A調用服務提供者A,B,C,當然實際情況下,這是永遠不可能的,根本不在一個內存空間中,我們需要自己模擬出來這種使用方式

?
1
2
3
$userSerivce = $client->client ('UserService');
$result = $userSerivce->getUserInfo (['user_id' => 100]);
var_dump($result);

在消費者內沒有UserService,更沒有getUserInfo 方法,這些都在服務提供者的應用中,如何去調用它們?

首先通過php的__call 方法去截取一個不存在的方法

?
1
2
3
4
5
6
7
8
9
public function __call($name, $arguments)
{
  $client = new ClientRpc($this->serviceName);
      
  $response = $client->send ($this->serviceName, $name, $arguments);
      
  return (json_decode ($response, true));
      
}

獲取后調用自己寫的send 方法,swoole出場

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class ClientRpc
{
  protected $client;
    
  public function __construct($service_name, $centerConfig)
  {
    $this->client = new \swoole_client(SWOOLE_SOCK_TCP);
      
    $center = Dispatcher::loadBalance ($service_name, $centerConfig);
    $this->client->connect ($center['ip'], $center['port'], 0.5);
  }
    
  public function send($service, $action, $arguments)
  {
    $request = new Request();
    
    $request->setService ($service);
    $request->setAction ($action);
    $request->setParameters ($arguments[0]);
    // 重組參數,組合成你希望的格式,最后轉成json發送到服務提供者
    $this->client->send (json_encode ((array)$request));
      
    return $this->client->recv ();
  }
    
  public function __destruct()
  {
    $this->client->close ();
    unset($this->client);
  }
}

希望本文所述對大家PHP程序設計有所幫助。

原文鏈接:https://segmentfault.com/a/1190000013481688

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 婷婷精品久久久久久久久久不卡 | 日韩在线| 福利资源在线观看 | 一级免费av | 黄色天堂 | 国产在线中文字幕 | 欧美日韩精品免费 | 欧美精品一区二 | 婷婷精品久久久久久久久久不卡 | √天堂8在线网 | 欧美在线网站 | 超碰二区 | 日韩城人网站 | 日韩视频一区二区三区 | 国产精品视频 | 欧美日韩视频第一页 | 黄色一级毛片网站 | 在线播放国产一区二区三区 | 91成人小视频 | 欧美日韩综合视频 | 欧美一区二区三区在线观看视频 | 国户精品久久久久久久久久久不卡 | 污视频免费| 久久综合久久久 | 国产精品无码久久久久 | 久久国产乱 | 日韩欧美一区二区三区 | 欧美一区二区三区精品 | 亚洲国产高清在线 | 国产精品第一国产精品 | 青青久久久| 国产亚洲精品精品国产亚洲综合 | 亚洲免费观看 | 日韩免费视频一区二区 | 欧美日韩精品免费观看 | 国产一区二区三区免费播放 | 亚洲精品一二三 | 亚洲精品一区在线观看 | 亚洲一区二区av | 国产精品国产三级国产aⅴ 成人在线免费看 | 久久只有精品 |