摘要:基于開發(fā)的擴(kuò)展版本要求安裝或者編輯配置在注冊(cè)和無需手動(dòng)注冊(cè)配置文件監(jiān)聽地址列表,字符串格式數(shù)組是否啟用方法,開啟關(guān)閉,開啟后將自動(dòng)對(duì)外發(fā)布一個(gè)遠(yuǎn)程調(diào)用方法客戶端可調(diào)用創(chuàng)建配置和路由文件應(yīng)用根目錄下的目錄下會(huì)自動(dòng)生成新文件
Laravel-hprose
基于 hprose/hprose-php 開發(fā)的Laravel擴(kuò)展:laravel-hprose
版本要求Laravel>=5.2安裝
composer require "zhuqipeng/laravel-hprose:v1.0-alpha"
或者編輯composer.json
"require": { "zhuqipeng/laravel-hprose": "v1.0-alpha" }配置
在 config/app.php 注冊(cè) ServiceProvider 和 Facade (Laravel 5.5 無需手動(dòng)注冊(cè))
"providers" => [ // ... ZhuqipengLaravelHproseServiceProvider::class, ]
"aliases" => [ // ... "LaravelHproseMethodManage" => ZhuqipengLaravelHproseFacadesHproseMethodManage::class, ]
配置.env文件
監(jiān)聽地址列表,字符串json格式數(shù)組
HPROSE_URIS=["tcp://0.0.0.0:1314"]
是否啟用demo方法,true開啟 false關(guān)閉,開啟后將自動(dòng)對(duì)外發(fā)布一個(gè)遠(yuǎn)程調(diào)用方法 demo
客戶端可調(diào)用:$client->demo()
HPROSE_DEMO=true // true or false
創(chuàng)建配置和路由文件:
php artisan vendor:publish --provider="ZhuqipengLaravelHproseServiceProvider"
應(yīng)用根目錄下的config目錄下會(huì)自動(dòng)生成新文件hprose.php使用 路由應(yīng)用根目錄下的routes目錄下會(huì)自動(dòng)生成新文件rpc.php
和 laravel 路由的用法相似,基于 dingo/api 的路由代碼上做了簡單修改
路由文件
routes/rpc.php
添加路由方法
LaravelHproseRouter::add(string $name, string|callable $action, array $options = []);
string $name 可供客戶端遠(yuǎn)程調(diào)用的方法名
string|callable $action 類方法,格式:AppControllersUser@update
array $options 是一個(gè)關(guān)聯(lián)數(shù)組,它里面包含了一些對(duì)該服務(wù)函數(shù)的特殊設(shè)置,詳情請(qǐng)參考hprose-php官方文檔介紹 鏈接
發(fā)布遠(yuǎn)程調(diào)用方法 getUserByName 和 update
LaravelHproseRouter::add("getUserByName", function ($name) { return "name: " . $name; }); LaravelHproseRouter::add("userUpdate", "AppControllersUser@update", ["model" => HproseResultMode::Normal]);
控制器
客戶端調(diào)用
$client->getUserByName("zhuqipeng"); $client->userUpdate("zhuqipeng");路由組
LaravelHproseRouter::group(array $attributes, callable $callback);array $attributes 屬性 ["namespace" => "", "prefix" => ""]
callable $callback 回調(diào)函數(shù)
LaravelHproseRouter::group(["namespace" => "AppControllers"], function ($route) { $route->add("getUserByName", function ($name) { return "name: " . $name; }); $route->add("userUpdate", "User@update"); });客戶端調(diào)用
$client->getUserByName("zhuqipeng"); $client->userUpdate("zhuqipeng");前綴
LaravelHproseRouter::group(["namespace" => "AppControllers", "prefix" => "user"], function ($route) { $route->add("getByName", function ($name) { return "name: " . $name; }); $route->add("update", "User@update"); });客戶端調(diào)用
$client->user->getByName("zhuqipeng"); $client->user->update("zhuqipeng"); // 或者 $client->user_getByName("zhuqipeng"); $client->user_update("zhuqipeng");啟動(dòng)服務(wù)php artisan hprose:socket_server
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29302.html
摘要:知乎的點(diǎn)贊,應(yīng)該還是可以參考的。除了網(wǎng)絡(luò)通信,還需要有高效的序列化框架,以及一種尋址方式,如果是帶會(huì)話狀態(tài)的調(diào)用,還需要有會(huì)話的狀態(tài)保持的功能。一般來說,框架實(shí)現(xiàn)的架構(gòu)原理都是類似的。服務(wù)端響應(yīng)主要是服務(wù)端業(yè)務(wù)邏輯實(shí)現(xiàn)。 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處 在我剛剛了解分布式的時(shí)候,經(jīng)常對(duì)RPC和分布式有些混淆,甚至一直以為兩者對(duì)等,所以我們先看看他們有什么區(qū)別? RPC實(shí)現(xiàn)了服務(wù)消費(fèi)...
摘要:知乎的點(diǎn)贊,應(yīng)該還是可以參考的。除了網(wǎng)絡(luò)通信,還需要有高效的序列化框架,以及一種尋址方式,如果是帶會(huì)話狀態(tài)的調(diào)用,還需要有會(huì)話的狀態(tài)保持的功能。一般來說,框架實(shí)現(xiàn)的架構(gòu)原理都是類似的。服務(wù)端響應(yīng)主要是服務(wù)端業(yè)務(wù)邏輯實(shí)現(xiàn)。 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處 在我剛剛了解分布式的時(shí)候,經(jīng)常對(duì)RPC和分布式有些混淆,甚至一直以為兩者對(duì)等,所以我們先看看他們有什么區(qū)別? RPC實(shí)現(xiàn)了服務(wù)消費(fèi)...
摘要:等之所以支持跨語言,是因?yàn)樗麄冏约憾x了一套結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,如的,用于編解碼對(duì)象,作為各個(gè)語言通信的中間協(xié)議。 前段時(shí)間覺得自己一直用別人的框架,站在巨人的肩膀上,也該自己造造輪子了 一時(shí)興起 就著手寫起了RPC框架 這里寫了系列博客拿給大家分享下 這篇是開篇的思路篇 項(xiàng)目最終的代碼放在了我的github上https://github.com/wephone/Me... 歡迎sta...
摘要:都是分開部署,單獨(dú)上線的。序列化畢竟是遠(yuǎn)程通信,需要將對(duì)象轉(zhuǎn)化成二進(jìn)制流進(jìn)行傳輸。服務(wù)化架構(gòu)的演進(jìn)架構(gòu)當(dāng)業(yè)務(wù)規(guī)模很小時(shí),將所有功能都不熟在同一個(gè)進(jìn)程中,通過雙機(jī)或者負(fù)載均衡器實(shí)現(xiàn)負(fù)債分流此時(shí),分離前后臺(tái)邏輯的架構(gòu)是關(guān)鍵。 showImg(https://segmentfault.com/img/bVbiI2F?w=2250&h=1500); 前言 為什么需要RPC,而不是簡單的HTTP...
閱讀 1767·2023-04-26 01:41
閱讀 3073·2021-11-23 09:51
閱讀 2733·2021-10-09 09:43
閱讀 9019·2021-09-22 15:13
閱讀 2452·2021-09-07 09:59
閱讀 2624·2019-08-30 15:44
閱讀 1132·2019-08-30 12:45
閱讀 2617·2019-08-30 12:43