當前位置:首頁 » 編程語言 » rpcphp

rpcphp

發布時間: 2022-08-29 16:58:42

❶ 什麼是rpc框架,及其作用,在php方向上的使用

遠程調用」
通常我們調用一個方法,譬如: localAdd(10, 20),localAdd方法的具體實現要麼是用戶自己定義,要麼存在於該語言的庫函數中,也就說在localAdd方法的代碼實現在本地,它是一個本地調用!

「遠程調用」意思就是:被調用方法的具體實現不在程序運行本地,而是在別的某個地方;

遠程調用原理
譬如 A調用B提供的remoteAdd方法:,

首先A與B之間建立一個TCP連接;
然後A把需要調用的方法名(這里是remoteAdd)以及方法參數(10, 20)序列化成位元組流發送出去;
B接受A發送過來的位元組流,然後反序列化得到目標方法名,方法參數,接著執行相應的方法調用(可能是localAdd)並把結果30返回;
A接受遠程調用結果
RPC框架無非就是把我剛才說的那些細節通通封裝起來,給用戶暴露簡單友好的API使用(ps:有些遠程調用選擇比較底層的socket協議,有些遠程調用選擇比較上層的HTTP協議);

遠程調用好處:
解耦:當方法提供者需要對方法內實現修改時,調用者完全感知不到,不用做任何變更;這種方式在跨部門,跨公司合作的時候經常用到,並且方法的提供者我們通常稱為:服務的暴露方
至於soap,yar,phprpc,thrift這幾樣的東西,一個都沒用過,所以不好評價

❷ php rpc好用嗎,有什麼優缺點php rpc框架哪個好

什麼是RPC框架? 如果用一句話概括RPC就是:遠程調用框架(Remote Procere Call)那什麼是遠程調用?通常我們調用一個php中的方法,比如這樣一個函數方法: localAdd(10, 20),localAdd方法的具體實現要麼是用戶自己定義的,要麼是php庫函數中自帶的,也就說在localAdd方法的代碼實現在本地,它是一個本地調用!遠程調用意思就是:被調用方法的具體實現不在程序運行本地,而是在別的某個遠程地方。

遠程調用原理

比如 A (client) 調用 B (server) 提供的remoteAdd方法:

  • 首先A與B之間建立一個TCP連接;

  • 然後A把需要調用的方法名(這里是remoteAdd)以及方法參數(10, 20)序列化成位元組流發送出去;

  • B接受A發送過來的位元組流,然後反序列化得到目標方法名,方法參數,接著執行相應的方法調用(可能是localAdd)並把結果30返回;

  • A接受遠程調用結果,輸出30。

  • RPC框架就是把我剛才說的這幾點些細節給封裝起來,給用戶暴露簡單友好的API使用。

    遠程調用的好處

    解耦:當server需要對方法內實現修改時,client完全感知不到,不用做任何變更;這種方式在跨部門,跨公司合作的時候經常用到,並且方法的提供者我們通常稱為:服務的暴露。

    RPC與Socket有什麼區別?

    通過上面的簡單闡述,好像RPC與Socket 好像啊。都是調用遠程的方法,都是client/server模式,我之前也寫了一篇文章: 細說socket 那他們有啥區別呢?

    RPC(遠程過程調用)採用客戶機/伺服器模式實現兩個進程之間相互通信。socket是RPC經常採用的通信手段之一,RPC是在Socket的基礎上實現的,它比socket需要更多的網路和系統資源。除了Socket,RPC還有其他的通信方法,比如:http、操作系統自帶的管道等技術來實現對於遠程程序的調用。微軟的Windows系統中,RPC就是採用命名管道進行通信。

    RPC與REST有什麼區別?

    通過了解RPC後,我們知道是RPC是client/server模式的,調用遠程的方法,REST也是我們熟悉的一套API調用協議方法,它也是基於client/server模式的,調用遠程的方法的,那他倆又有啥區別呢?

    REST API 和 RPC 都是在 Server端 把一個個函數封裝成介面暴露出去,以供 Client端 調用,不過 REST API 是基於HTTP協議的,REST致力於通過http協議中的POST/GET/PUT/DELETE等方法和一個可讀性強的URL來提供一個http請求。而 RPC 則可以不基於 HTTP協議
    因此,如果是後端兩種語言互相調用,用 RPC 可以獲得更好的性能(省去了 HTTP 報頭等一系列東西),應該也更容易配置。如果是前端通過 AJAX 調用後端,那麼用 REST API 的形式比較好(因為無論如何也避不開 HTTP 這道坎)。

    php中流行的rpc框架有哪些

    既然php是世界上最好的語言,那php中流行的RPC框架有哪些呢?

    先列舉下: phprpc,yar, thrift, gRPC, swoole, hprose

    因為時間和精力有限,不可能一個一個的去學習和使用,我選幾個世面上用的最多的幾個用下吧。因為RPC原理是一樣的,都是Client/Server模式,只是每個框架的使用方式不一樣而已。

❸ mfc能調用phprpc嗎

ActiveX控制項用於Web的過程是將控制項嵌入主頁中,用戶通過瀏覽器訪問該主頁時,將主頁中的控制項下載,並在用戶機器上注冊,以後就可在用戶的瀏覽器上運行。
控制項下載一次後就駐留在用戶本地機器上,下次再訪問相同的主頁時,可不再下載該控制項,而是直接運行用戶本地的控制項。這里控制項容器就是瀏覽器,用戶不需要通過瀏覽器調用控制項的屬性或方法。
因此,開發面向Web的ActiveX控制項比開發桌面的控制項還要簡單些,所復雜的是如何將該控制項很好地嵌入主頁,使用戶能正常瀏覽。

❹ phprpc for .net 怎麼用 我需要將一個JSON數據傳輸到phprpc for PHP的介面上

服務端還是用javaScriptSerializer正常寫,PHP這邊也是正常接收,該轉義的轉義,該解析的解析。如果發生錯誤,或者傳參失敗,先看看傳輸時的數據是否符合JSON規則。

❺ phprpc php 在本地測試介面的地址怎樣寫

我相信官網文檔對你更有幫助 http://www.phprpc.org/zh_CN/docs/

❻ 主流的RPC框架有哪些

Thrift 是由 Facebook 開源的一個 RPC 框架,現在已經掛在 apache.org 下了。主要的幾個好處:
1. 支持非常多語言,包括在 WEB 開發中很常用的 PHP,以及最重要的 C++/Python/Java 等 WEB後端常用語言,當然,還包括很 cool 的 Ruby、Erlang。
2. 完整的 RPC 框架實現,用腳本生成通訊相關的框架代碼,開發者只需要集中精力處理好 業務邏輯。比如搭建一個 Hello World Service 只需要幾分鍾。
3.擁有被 Facebook、Last.fm 等不少大規模互聯網應用驗證過的性能和可用性。

Hessian是一款基於HTTP協議的RPC框架,採用的是二進制RPC協議,非常輕量級 ,且速度較快。

當然,還有Hetty,它是一款構建於Netty和Hessian基礎上的高性能的RPC框架。

❼ zabbix jsrpc.php 什麼東西

「jsonrpc」: 「2.0」-這是標準的JSON RPC參數以標示協議版本。所有的請求都會保持不變。
「method」: 「method.name」-這個參數定義了真實執行的操作。例如:host.create、item.update等等
「params」-這里通過傳遞JSON對象來作為特定方法的參數。如果你希望創建監控項,」name」和」key_」參數是需要的,每個方法需要的參數在Zabbix API文檔中都有描述。
「id」: 1-這個欄位用於綁定JSON請求和響應。響應會跟請求有相同的」id」。在一次性發送多個請求時很有用,這些也不需要唯一或者連續
「auth」: 「″-這是一個認證令牌【authentication token】用以鑒別用戶、訪問API。這也是使用API進行相關操作的前提-獲取認證ID。

❽ php做客戶端,java做服務端,用webservice怎麼交互

.java編寫webservice服務端,php作為客戶端調用.
1.首先我們寫一個簡單的java類並發布webservice.
package com.php;
import java.util.Map;
/**
* @author yangjuqi
* @createdate 2009-5-18 下午04:43:09
*
*/
public class WebServiceImpl {
public String sendTransact(Map map) throws Exception {
System.out.println("::: Call testModel1 :::");

if(map!=null){
String bugmanifestid = StringUtil.getValue(map.get("bugmanifestid"));
String editedby = StringUtil.getValue(map.get("editedby"));
String dditeddate = StringUtil.getValue(map.get("dditeddate"));
String fullinfo = StringUtil.getValue(map.get("fullinfo"));
String action = StringUtil.getValue(map.get("action"));
System.out.println("bugmanifestid -$amp;>quot;$ +bugmanifestid);
System.out.println("editedby -$amp;>quot;$ +editedby);
System.out.println("dditeddate -$amp;>quot;$ +dditeddate);
System.out.println("fullinfo -$amp;>quot;$ +fullinfo);
System.out.println("action -$amp;>quot;$ +action);
}
return "success";
}
}
2.配置server-config.wsdd
<deployment xmlns=""
xmlns:java="">
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="auth"
type="java:com.php.AuthenticationHandler" />
<handler name="URLLogging"
type="java:com.php.LogHandler">
<parameter name="filename" value="c:\\MyService.log" />
</handler>
<service name="IWebService" provider="java:RPC">
<parameter name="className"
value="com.php.WebServiceImpl" />
<parameter name="allowedMethods" value="*" />
<namespace>http://localhost:8088/testphpweb</namespace>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
<handler type="URLLogging" />
</requestFlow>
</transport>
</deployment>
3.發布到jboss後,訪問http://localhost:8088/testphpweb/services/IWebService wsdl能看到xml文件就說明webservice發布好了。
4.寫testphpweb.php文件
< php
/*
* @author juqi yang $amp;<amp;$gt;
* @create date 2009-05-18
*/
header("Content-Type: text/html; charset=GB2312");
echo " ::: PHP CALL JAVA-WEBSERVICE ::: <br$amp;>quot;$;
require_once("nusoap/lib/nusoap.php");
// 要訪問的webservice路徑
$NusoapWSDL="http://localhost:8088/testphpweb/services/IWebService wsdl";
// 生成客戶端對象
$client = new soapclient($NusoapWSDL, true);
// 設置參數(注意:PHP只能以'數組集'方式傳遞參數,如果服務端是java,用Map接收)
$param = array( 'bugmanifestid' => 'E090500001',
'editedby' => '張三',
'dditeddate' => '2009-05-19',
'fullinfo' => '已聯系劉德華,籌備今晚吃飯的事,等待回復',
'action' => '0');
echo "begin remote 。。。<br$amp;>quot;$;
// 調用遠程方法
$result = $client->call('sendTransact', array($param));
echo "end remote 。。。<br$amp;>quot;$;
// 顯示執行結果
if (!$err=$client->getError()){
echo '結果 : '.$result;
}else{
echo '錯誤 : '.$err;
}
>
5.啟動apache,訪問
php頁面顯示:
::: PHP CALL JAVA-WEBSERVICE :::
begin remote 。。。
end remote 。。。
結果 : success
jboss後台監視結果:
17:12:20,781 INFO [STDOUT] ::: Call testModel1 :::
17:12:20,781 INFO [STDOUT] bugmanifestid ->E090500001
17:12:20,781 INFO [STDOUT] editedby ->張三
17:12:20,781 INFO [STDOUT] dditeddate ->2009-05-19
17:12:20,781 INFO [STDOUT] fullinfo ->已聯系劉德華,籌備今晚吃飯的事,等待回復
17:12:20,796 INFO [STDOUT] action ->0
到此,php作為客戶端調用java寫的webservice服務端完成.
二,php編寫webservice服務端,java作為客戶端調用.
1.編寫php webservice
< php
/*
* @author juqi yang $amp;<amp;$gt;
* @create date 2009-05-18
*/
header("Content-Type: text/html; charset=GB2312");
require_once("nusoap/lib/nusoap.php");
function sendManifest($param)
{
//把接收到的數據顯示出來
return "hello ".$param["projectid"]."<=$amp;>quot;$.$param["projectname"]."<=$amp;>quot;$.$param["moleid"];
}
$server = new nusoap_server();
//配置WSDL namespace
$server->configureWSDL('myservice', //服務名稱
'', //tns指定的namespace,一般填寫自己的URI
true, //endpoint url or false
'rpc', //服務樣式
'', //傳輸協議,一直是這個。
'' //wsdl 'types'元素targetNamespace
);
// 注冊web服務
$server->register('sendManifest', // 服務
array(
'projectid' => 'xsd:string',
'projectname' => 'xsd:string',
'moleid' => 'xsd:string',
'molepath' => 'xsd:string',
'bugtitle' => 'xsd:string',
'bugtype' => 'xsd:string',
'openedby' => 'xsd:string',
'openeddate' => 'xsd:string',
'assignedto' => 'xsd:string',
'assigneddate' => 'xsd:string',
'fixedtime' => 'xsd:string',
'fullinfo' => 'xsd:string',
'bugmanifestid' => 'xsd:string'), // 輸入參數;數組,指定類型
array('resultCode' => 'xsd:string'), // 輸出;數組,指定類型
'', // namespace of method
'', // soapaction
'rpc', // style
'encoded', // use
'serviceConsumeNotify' // documentation
);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
>
2.啟動apache後,訪問 ,如果頁面如下圖所示,表示webservice發布好了。
3.編寫java客戶端CallPhpServer .java 並調用php webservice
package com.php;
import java.util.HashMap;
import java.util.Map;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
* @author yangjuqi
* @createdate 2009-5-18 下午05:31:06
*
*/
public class CallPhpServer {
/**
* 測試方法
* @return
* @throws Exception
*/
public static String callManifest() throws Exception {
System.out.println("0");
Service service = new Service();
Call call = (Call) service.createCall();
System.out.println("1");
call.setTargetEndpointAddress(new java.net.URL(""));
call.setOperationName("sendManifest");
System.out.println("2");
Map map=new HashMap();
map.put("projectid", "109");
map.put("projectname", new String("新MM國際物流平台".getBytes(),"iso-8859-1"));
map.put("moleid", "11");
map.put("molepath", new String("財務管理".getBytes(),"iso-8859-1"));
map.put("bugtitle", new String("關於總賬報表數據的問題".getBytes(),"iso-8859-1"));
map.put("bugtype", "TrackThings");
map.put("openedby", "zhangsan");
map.put("openeddate", "2009-05-31");
map.put("assignedto", "liumang");
map.put("assigneddate", "2009-05-31");
map.put("fixedtime", "2009-06-03");
map.put("fullinfo", new String("現在總賬報表頁面下的合計數據不對,煩請抓緊事件核實確認更正,謝謝!".getBytes(),"iso-8859-1"));
map.put("bugmanifestid", "E090500001");
call.addParameter("param", org.apache.axis.Constants.SOAP_ARRAY,javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
System.out.println("3");
Object obj=call.invoke(new Object[]{map});
return obj.toString();
}
public static void main(String[] args) throws Exception {
System.out.println("::: call php webservice :::");
String str = callManifest();
String result=new String(str.getBytes("iso-8859-1"),"GBK");
System.out.println(result);
}
}
控制台顯示結果:
::: call php webservice :::
0
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
1
2
3
hello 109<=>新MM國際物流平台<=>11
到此,java作為客戶端調用php的webservice服務端完成.

熱點內容
奇跡傳奇日服為什麼沒有伺服器 發布:2025-01-16 16:22:08 瀏覽:858
android瀏覽器控制項 發布:2025-01-16 16:22:05 瀏覽:155
資料庫10061 發布:2025-01-16 16:11:47 瀏覽:701
電腦網路ip地址怎麼配置 發布:2025-01-16 16:03:48 瀏覽:330
我的世界安卓網易版怎麼裝材質包 發布:2025-01-16 16:00:55 瀏覽:255
404頁面源碼 發布:2025-01-16 15:58:48 瀏覽:888
手機建行密碼忘記了怎麼辦 發布:2025-01-16 15:45:38 瀏覽:225
易語言視頻播放源碼 發布:2025-01-16 15:39:35 瀏覽:344
肇觀演算法 發布:2025-01-16 15:38:39 瀏覽:611
管家婆找不到加密狗 發布:2025-01-16 15:10:28 瀏覽:308