中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何進(jìn)行.NET開源項目StreamJsonRpc的分析

本篇文章給大家分享的是有關(guān)如何進(jìn)行.NET 開源項目StreamJsonRpc的分析,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)建站憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了成都做網(wǎng)站、成都網(wǎng)站設(shè)計服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

StreamJsonRpc 是一個實現(xiàn)了 JSON-RPC 通信協(xié)議的開源 .NET 庫,在介紹 StreamJsonRpc 之前,先來了解一下 JSON-RPC。

JSON-RPC 介紹

JSON-RPC 是一個無狀態(tài)且輕量級的遠(yuǎn)程過程調(diào)用(RPC)協(xié)議,其使用 JSON(RFC 4627)作為數(shù)據(jù)格式。

目前 JSON-RPC 的版本已發(fā)展到 2.0,JSON-RPC 2.0 與 1.0 的約定規(guī)范是不一樣的。2.0 包含一個名為 jsonrpc 且值為 2.0 的成員,而 1.0 版本是不包含的。所以我們可以很容易在兩個版本間區(qū)分出 2.0。

JSON-RPC 在客戶端與服務(wù)端之間交換的所有成員名應(yīng)是區(qū)分大小寫的,函數(shù)、方法、過程都認(rèn)為是可互換的。客戶端被定義為請求對象的來源及響應(yīng)對象的處理程序;服務(wù)端被定義為響應(yīng)對象的起源和請求對象的處理程序。

請求對象

發(fā)送一個請求對象至服務(wù)端代表一個 RPC 調(diào)用,JSON-RPC 2.0 規(guī)定一個請求對象包含下列成員:

  • jsonrpc:指定 JSON-RPC 協(xié)議版本的字符串,必須準(zhǔn)確寫為“2.0”。

  • method:包含所要調(diào)用方法名稱的字符串,以 rpc 開頭的方法名,用英文句號連接的為預(yù)留給 rpc 內(nèi)部的方法名及擴展名,且不能在其他地方使用。

  • params:調(diào)用方法所需要的結(jié)構(gòu)化參數(shù)值,該成員參數(shù)可以被省略。

  • id:已建立客戶端的唯一標(biāo)識,值必須包含一個字符串、數(shù)值或 NULL 空值。如果不包含該成員則被認(rèn)定為是一個通知。該值一般不為 NULL,若為數(shù)值則不應(yīng)該包含小數(shù)。

沒有包含 id 成員的請求對象為通知,作為通知的請求對象表明客戶端對服務(wù)端響應(yīng)不感興趣,服務(wù)端可以不響應(yīng)請求對象給客戶端。

下面是幾個請求對象的 JSON 結(jié)構(gòu)示例(“-->”表示發(fā)送,“<--”表示響應(yīng),下同):

--> { "jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1 }
--> { "jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}
--> {"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]} // 通知

響應(yīng)對象

當(dāng)客戶端發(fā)起一個 RPC 調(diào)用時,除通知之外,服務(wù)端都必須回復(fù)響應(yīng)。響應(yīng)也表示為一個 JSON 對象,使用以下成員:

  • jsonrpc:指定 JSON-RPC 協(xié)議版本的字符串,必須準(zhǔn)確寫為“2.0”。

  • result:調(diào)用成功時響應(yīng)給客戶端的結(jié)果,當(dāng)調(diào)用發(fā)生錯誤時可以不包含該成員。

  • error:調(diào)用發(fā)生錯誤時返回給客戶端的錯誤信息,在調(diào)用失敗時必須包含該成員。

  • id:對應(yīng)請求對象的“id”,其值必須與請求對象中的“id”值一致。

響應(yīng)對象必須包含 result 或 error 成員之一。

響應(yīng)對象的 error 成員的結(jié)構(gòu)包含下列成員:

  • code:使用數(shù)值表示該異常的錯誤類型,必須為整數(shù)。、

  • message:對該錯誤的簡單描述字符串,該描述應(yīng)盡量限定在簡短的一句話。

  • data:包含關(guān)于錯誤的附加信息,可忽略。

其中 -32768 至 -32000 為保留的預(yù)定義錯誤代碼,各保留錯誤代碼的含義請查看文末參考鏈接[1]。

下面是幾個響應(yīng)對象的 JSON 結(jié)構(gòu)示例:

<-- {"jsonrpc": "2.0", "result": 19, "id": 1}
<-- {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}
<-- {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null} // 無效調(diào)用

批量調(diào)用

當(dāng)需要同時發(fā)送多個請求對象時,客戶端可以發(fā)送一個包含所有請求對象的數(shù)組。

當(dāng)批量調(diào)用的所有請求對象處理完成時,服務(wù)端則需要返回一個包含相對應(yīng)的響應(yīng)對象數(shù)組。每個響應(yīng)對象都應(yīng)對應(yīng)每個請求對象,除非是通知的請求對象。服務(wù)端可以并發(fā)的,可以以任意順序和任意寬度并行處理這些批量調(diào)用。而客戶端應(yīng)該是基于各個響應(yīng)對象中的 id 成員來匹配對應(yīng)的請求對象。

若批量調(diào)用沒有需要返回的響應(yīng)對象,則服務(wù)端不需要返回任何結(jié)果。

下面是一個批量請求及響應(yīng)的 JSON 結(jié)構(gòu)示例:

--> [
     {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
     {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
     {"foo": "boo"},
     {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"},
     {"jsonrpc": "2.0", "method": "get_data", "id": "9"}
   ]
<-- [
     {"jsonrpc": "2.0", "result": 7, "id": "1"},
     {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
     {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "5"},
     {"jsonrpc": "2.0", "result": ["hello", 5], "id": "9"}
   ]

當(dāng)批量請求對象都是通知時,服務(wù)端不需要返回結(jié)果。

StreamJsonRpc 庫介紹

StreamJsonRpc 是一個實現(xiàn)了 JSON-RPC 通信協(xié)議的 .NET 庫,支持 .NET Core。它把 RPC 的調(diào)用封裝為公開的 .NET API,可以很方便的進(jìn)行 RPC 請求的發(fā)送和接收操作。StreamJsonRpc 是微軟官方的一個開源庫,目前 Star 數(shù)接近 300,貌似知道的人不多或者用的人不多。GitHub 地址:

github.com/microsoft/vs-streamjsonrpc

StreamJsonRpc 可以在 Stream、WebSocket 或 System.IO.Pipelines 管道上工作,獨立于底層傳輸。除了包含 JSON-RPC 規(guī)范所需的特性外,它額外還有如下優(yōu)點:

  • 請求取消

  • .NET 事件作為通知

  • 動態(tài)客戶端代理生成

  • 支持緊湊的 MessagePack 二進(jìn)制序列化

  • 易于實現(xiàn)插件式架構(gòu)的消息處理和格式化

使用 StreamJsonRpc 主要有四個基本步驟:建立 JSON-RPC 連接、發(fā)送 RPC 請求、接收 RPC 請求、斷開連接。

以上就是如何進(jìn)行.NET 開源項目StreamJsonRpc的分析,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前名稱:如何進(jìn)行.NET開源項目StreamJsonRpc的分析
URL鏈接:http://www.rwnh.cn/article22/igpdcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、App設(shè)計、虛擬主機、小程序開發(fā)、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
南江县| 南江县| 自治县| 行唐县| 三门县| 北流市| 庐江县| 洪江市| 天全县| 白银市| 兴安县| 西平县| 金沙县| 嘉兴市| 诏安县| 淮滨县| 瑞安市| 普宁市| 财经| 盖州市| 阜宁县| 威海市| 英吉沙县| 伊春市| 杭锦后旗| 文登市| 徐闻县| 浦江县| 沂水县| 海宁市| 梁河县| 和龙市| 汉阴县| 天峨县| 吉首市| 景德镇市| 西吉县| 柳州市| 呼图壁县| 宁南县| 盐池县|