Golang 語言使用標準庫 net/rpc/jsonrpc 包跨語言遠程調用

2021-01-15 Golang語言開發棧

01

介紹


Go 語言標準庫 net/rpc 默認採用 encoding/gob 包編解碼傳輸數據,gob 編解碼方式僅適用於 Go 應用,如果需要跨語言遠程調用,可以指定支持跨語言的其他編解碼方式,比如 protobuf,或使用 net/rpc 的子包 net/rpc/jsonrpc,它支持JSON-RPC 1.0,通過 json 格式傳輸數據。


02

Go 語言 net/rpc/jsonrpc 標準庫


jsonrpc 是基於 TCP 協議,不支持 HTTP 協議。jsonrpc 採用 JSON 編解碼傳輸數據,而不是採用 gob 編解碼方式。其他方面和 net/rpc 一樣,可以通過閱讀「Go 使用標準庫 net/rpc 包」了解相關內容。


03

net/rpc/jsonrpc 怎麼使用?


通過一個簡單的示例,我們演示 Go 語言標準庫 net/rpc/jsonrpc 的使用方法。


RPC 方法:

服務提供方定義一個可導出的 User 對象和一個符合 RPC 方法定義規則的 Register 方法。



服務提供方:

服務提供方註冊 user 對象,創建基於 TCP 協議的運行在單個連接上的 JOSN-RPC 伺服器。



服務調用方:

服務提供方註冊 user 對象後,服務調用方就可以調用 user 對象的 user.Register 方法。調用方法之前,先連接一個指定網絡協議和地址的 JSON-RPC 服務,返回一個新創建的客戶端。然後,使用客戶端調用 user.Register 方法,傳遞參數,等待返回結果。



04

總結


本文先介紹了 Go 語言標準庫 net/rpc/jsonrpc 的編解碼方式和功能。即使用 json 編解碼傳輸數據,提供跨語言遠程調用的功能。然後,通過一個簡單示例來演示了 net/rpc/jsonrpc 的使用方法。



推薦閱讀:

Go 使用標準庫 net/rpc 包

相關焦點

  • 從0 到 1:全面理解 RPC 遠程調用!
    01、基於 xml-rpcPython實現 rpc,可以使用標準庫裡的 SimpleXMLRPCServer,它是基於XML-RPC 協議的。有了這個模塊,開啟一個 rpc server,就變得相當簡單了。
  • rpc、json Rpc和http區別
    帶索引數組參數的rpc調用--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}<-- {"jsonrpc": "2.0", "result": 19, "id": 1} 2.
  • AJAXRPC: javascript調用服務端方法
    AJAXPRC是快速、簡單的Javascript遠程方法調用。
  • 微服務之RPC簡述
    一、什麼是RPCRPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程電腦程式上請求服務,而不需要了解底層網絡技術的協議。比如說兩臺伺服器A,B,一個應用部署在A伺服器上,想要調用B伺服器上應用提供的函數/方法,由於不在一個內存空間,不能直接調用,就需要通過網絡來表達調用的語義和傳達調用的數據,而這種方式就是rpcRPC 的主要功能目標是讓構建分布式計算(應用)更容易,在提供強大的遠程調用能力時不損失本地調用的語義簡潔性。
  • 微服務RPC框架選美
    我是微博開源的一套高性能、易於使用的分布式遠程服務調用(RPC)框架。我是Google開源的一套面向移動和HTTP/2設計的,高性能的、通用的遠程調用框架。Dubbo:Dubbo2.0 相比較 Dubbo1.0(默認使用的都是 hessian2序列化)性能均有提升。如對性能有更高要求可以使用dubbo 序列化,由其是在處理複雜對象時。 Dubbo 的設計目的是為了滿足高並發小數據量的 rpc 調用,在大數據量下的性能表現並不好,建議使用 rmi 或 http 協議。
  • 以太坊可用RPC節點列表
    一些RPC節點可能由於不可預知的原因,間歇性的無法訪問,大家使用前可以使用以下命令測試一下RPC節點的連通性:curl RPC_URL -H 'Content-Type: application/json' -X POST --data '{"jsonrpc":"2.0","method
  • Go 語言:別再問我什麼是反射
    在 Go 語言中,空接口 interface{}是可以作為一切類型值的通用類型使用。所以這裡的接口值 interface value 可以理解為空接口變量值 interface{} value。反射的應用在程序開發中是否需要使用反射功能,判斷標準很簡單,即是否需要用到變量的類型信息。這點不難判斷,如何合理的使用反射才是難點。因為,反射不同於普通的功能函數,它對程序的性能是有損耗的,需要儘量避免在高頻操作中使用反射。
  • 就能學會以太坊 JSON API 基礎知識!
    由於作者仍然需要與網絡通信,所以作者使用了Ethereum提供的JSON-RPC API,所有的web3庫都構建在這個API之上。原來,這是非常有趣的一件事,讓我們一起來看看吧。"headers = {'Content-type': 'application/json'}為了簡單起見,我們使用Infura節點連接到Ethereum Ropsten Testnet。
  • 五分鐘學後端技術:如何學習Java工程師必須掌握的RPC
    常用的RPC框架gRPC:是 Google 公布的開源軟體,基於最新的 HTTP 2.0 協議,並支持常見的眾多程式語言。RPC 框架是基於 HTTP 協議實現的,底層使用到了 Netty 框架的支持。Thrift:是 Facebook 的開源 RPC 框架,主要是一個跨語言的服務開發框架。 用戶只要在其之上進行二次開發就行,應用對於底層的 RPC 通訊等都是透明的。
  • gRPC首頁、文檔和下載 - RPC 框架 - OSCHINA - 中文開源技術交流...
    目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
  • 搜狗開源srpc:自研高性能通用RPC框架
    且srpc對於thrift接口描述文件實現了解析和代碼生成,因此用戶在srpc上使用thrift IDL時無需依賴thrift庫。而在baidu-std協議的實現上,吞吐和長尾在大部分場景下依然是srpc更優。且由於workflow支持Windows(同機性能比linux快20%),所以這等同於用戶得以在Windows下使用brpc。
  • 直觀講解一下 RPC 調用和 HTTP 調用的區別!
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫很長時間以來都沒有怎麼好好搞清楚RPC(即Remote Procedure Call,遠程過程調用)和HTTP調用的區別,不都是寫一個服務然後在客戶端調用麼?這裡請允許我迷之一笑~Naive!
  • 從零開始,徒手擼一個簡單的 RPC 框架,輕鬆搞定!
    得知了RPC(遠程過程調用
  • rpc分布式服務 - CSDN
    在達成【「使用統一的RPC框架」是正確的道路】這個一致的前提下,本文期望用簡單通俗的言語簡述一下一個通用RPC框架的技術點與實現。 二、RPC背景與過程什麼是RPC(Remote Procedure Call Protocol),遠程過程調用?
  • api框架 web 最好的go_golang api框架 - CSDN
    曾經我以為Python世界裡的框架已經夠多了,後來發現相比golang簡直小巫見大巫。golang提供的net/http庫已經很好了,對於http的協議的實現非常好,基於此再造框架,也不會是難事,因此生態中出現了很多框架。既然構造框架的門檻變低了,那麼低門檻同樣也會帶來質量參差不齊的框架。
  • Gol語言測試理念和工具
    RSpec風格中使用諸如函數Describe,Expect的語法模仿了人類語言的表達體驗。但是但是對golang碼農來說,這來的可能會很突兀,需要重新學習和適應。另一個相對輕量級的庫是testify/assert,它添加了諸如assert.Equal()之類的通用斷言函數。
  • HTTP-RPC首頁、文檔和下載 - Java的REST庫 - OSCHINA - 中文開源...
    http-rpc是一個快速在Java裡搭建REST風格服務的跨平臺的庫,可以從Java,Swift,或 JavaScript消費他們。
  • 【行業資訊】SOFARPC v5.7.4 發布,螞蟻金服開源 Java RPC 框架
    SOFARPC 致力於簡化應用之間的 RPC 調用,為應用提供方便透明、穩定高效的點對點遠程服務調用方案。為了用戶和開發者方便的進行功能擴展,SOFARPC 提供了豐富的模型抽象和可擴展接口,包括過濾器、路由、負載均衡等等。同時圍繞 SOFARPC 框架及其周邊組件提供豐富的微服務治理方案。