1. 程式人生 > >workerman-json-rpc:使用workerman快速進行RPC開發的套路

workerman-json-rpc:使用workerman快速進行RPC開發的套路

二、

JSON (JavaScript Object Notation)是一種用於在元件間互動資訊的資料交換格式,其是以JavaScript 為基礎的資料表示語言。既方便於人的讀寫習慣,又有利於計算機的解析和生成。
RPC(Remote Procedure Call)是遠端呼叫,既客戶端通過某種協議向伺服器發起請求並獲得結果。RPC使得開發分散式網路程式非常方便,並且能極大限度的將網路系統的各個部分解耦,方便後續開發、維護。
workerman-json-rpc是一個以workerman作為伺服器容器,使用Json作為協議簡單高效的RPC遠端呼叫框架。

這裡寫圖片描述
下載解壓之後目錄結構如下圖,我們把JsonRpc

Statistics 這2個目錄的全部拷貝到 我們自己的專案中。
這裡寫圖片描述
拷貝到jsonrpc 資料夾中,workerman 目錄還是我們最原始是workerman核心包。

1.新建allserver.php 來作為我們的服務端:

<?php

//引入Workerman核心包
require_once 'workerman/Autoloader.php';
//引入jsonRpc
require_once 'jsonrpc/JsonRpc/start.php';

啟動:

php allserver.php  start

這裡寫圖片描述

2.客戶端
我們在另外一個網站(客戶端)來呼叫我們服務端。
因為我們服務端使用的是『workerman-json-rpc』這個外掛,其中也封裝了客戶端的程式碼。
我們把JsonRpc/Clients/PrcClient.php

檔案拷貝到我們的客戶端專案,然後新建一個test.php檔案來測試
這裡寫圖片描述
test.php:

<?php

require_once 'RpcClient.php';

 // 服務端列表
$address_array = array(
    'tcp://10.211.55.13:2015', //我們只有一個服務
);
// 配置服務端列表
RpcClient::config($address_array);

$uid = 567;
$user_client = RpcClient::instance('User'); 
//這個User是服務端的類,在JsonRpc/Services/User.php
//呼叫User類中的方法 var_dump($user_client->getEmail(123));

這裡寫圖片描述

3.回到服務端,新建新聞服務News.php
這裡寫圖片描述
可以看到,預設有Blog類和User類(前面我們已經在客戶端呼叫過)。

在服務端新建了一個News 服務後,不需要重啟服務(不需要再次執行 php allserver.php start)。

來到客戶端測試:

<?php

require_once 'RpcClient.php';

 // 服務端列表
$address_array = array(
    'tcp://10.211.55.13:2015', //我們只有一個服務
);
// 配置服務端列表
RpcClient::config($address_array);

//客戶端呼叫新聞服務
$client = RpcClient::instance('News');
var_dump($client->getTodayNews());

這裡寫圖片描述

相關推薦

workerman-json-rpc使用workerman快速進行RPC開發套路

二、 JSON (JavaScript Object Notation)是一種用於在元件間互動資訊的資料交換格式,其是以JavaScript 為基礎的資料表示語言。既方便於人的讀寫習慣,又有利於計算機的解析和生成。 RPC(Remote P

Minikube使用 Kubernetes 進行本地開發

Minikube 是一個允許開發人員在本地使用和執行 Kubernetes 叢集的工具,從而使開發人員的生活變得輕鬆。 在這篇部落格中,對於我測試的例子,我使用的是 Linux Mint 18,但其它 Linux 發行版在安裝部分沒有區別。 cat /etc/lsb-release DI

從零走向專業,騰訊前端大牛經驗分享如何快速學習前端開發

很多同學想學習WEB前端開發,不過面對大量的前端學習資料(視訊教程、網上教程、書籍)等,不知道從何處下手。 作為一個多年從事前端開發的程式設計師,為了讓新手程式設計師少走點彎路,這裡就分享騰訊前端大牛快速學習前端開發的經驗: 一、前端學習思路 前端學習存在一個普遍的問題:感覺程式語

RabbitMQ的學習(五)(最全面)Spring整合RabbitMQ進行RPC遠端呼叫

前面用java簡單對rabbitmq進行了學習,但rabbitmq的功能遠非如此,配合Spring或Springboot進行開發,才是java工程師做的工作,下面直接進行實戰: 一、建立SSM專案 PS初期web專案下載地址(單純的web,用於練習): https://downloa

Python操作rabbitmq系列(六):進行RPC調用

block 異常 遠程 轉換 調用 成了 mage chang 多少 此刻,我們已經進入第6章,是官方的最後一個環節,但是,並非本系列的最後一個環節。因為在實戰中還有一些經驗教訓,並沒體現出來。由於馬上要給同事沒培訓celery了。我也來不及寫太多。等後面,我們再慢慢補充。

【轉】Java學習---快速掌握RPC原理及實現

消費者 阿裏 局限 kryo nes 很多 cal 網絡 href 【原文】https://www.toutiao.com/i6592365493435236872/ ?RPC概述 RPC(Remote Procedure Call)即遠程過程調用,也就是說兩臺服務器A,

五分鐘快速掌握RPC原理及實現

隨著公司規模的不斷擴大,以及業務量的激增,單體應用逐步演化為服務/微服務的架構模式, 服務之間的呼叫大多采用rpc的方式呼叫,或者訊息佇列的方式進行解耦。幾乎每個大廠都會建立自己的rpc框架,或者基於知名的rpc框架進行改造因此今天我們來講講rpc吧。   ​RPC概述 RPC(

使用GDAL進行RPC座標轉換

使用GDAL進行RPC座標轉換   使用GDAL進行RPC座標轉換 對於高解析度遙感衛星資料而言,目前幾乎都提供了有理函式模型(RFM)來進行影象校正(SPOT系列提供了有理函式模型之外還提供了嚴格軌道模型)。對遙感影像進行校正目前最常用的就是使用有理函式模型來進行校正。

Spring基礎快速入門spring boot(8)使用Junit進行測試

使用Junit或者TestNG可以進行單體測試,這篇文章簡單說明一下如何在Spring boot的專案中使用Junit進行單體測試。 pom設定 pom中需要新增spring-boot-starter-test <dependency> <g

Dubbo錯誤排查com.alibaba.dubbo.rpc.RpcException: Invoke remote method timeout

com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method 可能的錯誤原因有幾個: 一,pojo沒有沒有進行序列化 具體沒有序列化的類會在錯誤資訊中顯示,在錯誤資訊中搜索“Serializable”即可找到將其實現序列化,消

【圖文詳細 】HDFS面試題介紹Hadoop中RPC協議,以及底層用什麼框架封裝的

用於將使用者請求中的引數或者應答轉換成位元組流以便跨機傳輸。 函式呼叫層:函式呼叫層主要功能是:定位要呼叫的函式,並執行該函式,Hadoop採用了java的反射機制和動態代理實現了函式的呼叫。 網路傳輸層:網路傳輸層描述了Client和Server之間訊息的傳輸方式,Hadoop採用了基

NET Core微服務之路自己動手實現Rpc服務框架,基於DotEasy.Rpc服務框架的介紹和整合

本篇內容屬於非實用性(拿來即用)介紹,如對框架設計沒興趣的朋友,請略過。   快一個月沒有寫博文了,最近忙著兩件事;    一:閱讀劉墉先生的《說話的魅力》,以一種微妙的,你我大家都會經常遇見的事物,來建議說話的“藝術和魅力”,對於我們從事軟體開發、不太善於溝通

NET Core微服務之路自己動手實現Rpc服務框架,基於DotEasy.Rpc服務框架的介紹和整合...

本篇內容屬於非實用性(拿來即用)介紹,如對框架設計沒興趣的朋友,請略過。  快一個月沒有寫博文了,最近忙著兩件事;    一:閱讀劉墉先生的《說話的魅力》,以一種微妙的,你我大家都會經常遇見的事物,來建議說話的“藝術和魅力”,對於我們從事軟體開發、不太善

Java-RPC2)NIO入門初窺

Java NIO(New IO)是從Java 1.4版本開始引入的一個新的IO API,可以替代標準的Java IO APIChannels and Buffers(通道和緩衝區):標準的IO基於位元組流和字元流進行操作的,而NIO是基於通道(Channel)和緩衝區(Bu

Controller呼叫service報錯com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote service XXX

Controller呼叫service報錯:com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote service :XXX 1.錯誤原因:sevice方法中傳遞引數沒有序列化 RPC(遠端過程呼叫協議)是通過底層

Spring Boot快速入門(四)使用jpa進行資料庫操作

新增依賴 新建專案選擇web,JPA,MySQL三個依賴 對於已存在的專案可以在bulid.gradle加入,spring boot將會幫你自動配置好 compile('org.springframework.boot:spring-boot-starter

WorkerMan學習篇websocket+workerman聊天功能設計(一):簡單認證

初步設計如下 1、websocket客戶端連線服務端 是無腦的(這很重要) 2、服務端需要記錄連線進來的所有客戶端(方便日後統一廣播訊息) 3、服務端肯定能獲得客戶端ip。為此我們還需要客戶端加入使用者暱稱來區分 4、服務端可以無腦的向客戶端傳送訊息。但

Android訪問網路服務端返回XML或JSON格式資料,Android 進行解析並使用ListView顯示

剛剛入門學習了Android的ListView,也是看了傳智播客黎活明老師的視訊學習了,但是一直執行不了,還報錯了。報的錯誤是:at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.jav

RabbitMQ入門遠端過程呼叫(RPC)

假如我們想要呼叫遠端的一個方法或函式並等待執行結果,也就是我們通常說的遠端過程呼叫(Remote Procedure Call)。怎麼辦? 今天我們就用RabbitMQ來實現一個簡單的RPC系統:客戶端傳送一個請求訊息,服務端以一個響應訊息迴應。為了能夠接收到響應,客戶端在傳送訊息的同時傳送一個回撥佇列用來

[RDMA] 高效能非同步的可靠訊息傳遞和RPC Accelio

目錄 1. Introduce Accelio是一個高效能非同步的可靠訊息傳遞和RPC庫,能優化硬體加速。 RDMA和TCP / IP傳輸被實現,並且其他的傳輸也能被實現,如共享儲存器可以利用這個高效和方便的API的