Golang快速實現一個簡單RPC服務
基本概念
- RPC(Remote Procedure Call)遠端過程呼叫,簡單的理解是一個節點請求另一個節點提供的服務,該協議允許執行於一臺計算機的程式呼叫另一臺計算機的子程式,而程式設計師無需額外地為這個互動作用程式設計,RPC最直接的作用就是微服務。
程式碼
實現一個簡單的服務呼叫,client呼叫server服務計算圓形的面積。
- Client:
package main
import (
"fmt"
"net/rpc"
)
func main() {
// 1. 要呼叫的服務地址
client, err := rpc.DialHTTP("tcp", "127.0.0.1:8181")
if err != nil {
panic(err.Error())
}
// 請求值
var req float32 = 11
// 2. 同步方式呼叫伺服器方法計算圓形的面積
var resp *float32
err = client.Call("MathUtil.CalculateCircleArea", req, &resp)
if err != nil {
panic(err.Error())
}
fmt.Println(*resp)
}
- Server:
package main
import (
"fmt"
"math"
"net"
"net/http"
"net/rpc"
)
type MathUtil struct{
}
// 該方法向外暴露:提供計算圓形面積的服務
func (mu *MathUtil) CalculateCircleArea(req float32, resp *float32) error {
*resp = math.Pi * req * req
return nil
}
func main() {
// 1. 初始化指標資料型別
mathUtil := new(MathUtil)
// 2. 呼叫net/rpc包的功能將服務物件進行註冊
err := rpc.Register(mathUtil)
if err != nil {
panic(err.Error())
}
// 3. 通過該函式把mathUtil中提供的服務註冊到HTTP協議上,方便呼叫者可以利用http的方式進行資料傳遞
rpc.HandleHTTP()
//4、在特定的埠進行監聽
listen, err := net.Listen("tcp", "127.0.0.1:8181")
if err != nil {
panic(err.Error())
}
fmt.Println("監聽地址: ", listen.Addr())
http.Serve(listen, nil)
}
相關文章
- golang快速實現服務端網頁截圖Golang服務端網頁
- 從零實現一個RPC框架系列文章(二):11個類實現簡單RPCRPC框架
- binder 一個簡單的c++服務的實現,與callback實現C++
- 自己用 Netty 實現一個簡單的 RPCNettyRPC
- 用 Go + WebSocket 快速實現一個 chat 服務GoWeb
- 寫一個RPC服務RPC
- socket實現簡單ssh服務
- 基於akka與scala實現一個簡單rpc框架RPC框架
- 快速實現一個簡單閹割版的HashMapHashMap
- 在 Golang 中實現一個簡單的Http中介軟體GolangHTTP
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- golang實現簡單的併發任務消費Golang
- Express簡單起一個本地服務介面Express
- 遠端終端服務的簡單實現
- 簡單實現附近周邊服務查詢功能
- netty 實現簡單的rpc呼叫NettyRPC
- Java實現最簡單的RPC框架JavaRPC框架
- 用 Golang 實現百萬級 Websocket 服務GolangWeb
- golang實現的長連線服務Golang
- 簡單幾步使用Dropwizard實現一個RESTful微服務REST微服務
- 動手實現一個簡單的 rpc 框架到入門 grpc (上)RPC框架
- 動手實現一個簡單的 rpc 框架到入門 grpc (下)RPC框架
- 動手實現一個簡單的 rpc 框架到入門 grpc(上)RPC框架
- 徒手擼一個簡單的RPC框架RPC框架
- twirp: 支援protobuf服務定義的簡單RPC框架RPC框架
- Golang簡單製作一個池Golang
- php+nginx實現最簡單的遠端呼叫rpc(微服務)PHPNginxRPC微服務
- golang如何使用原生RPC及微服務簡述GolangRPC微服務
- socket實現簡單傳檔案ftp/scp服務FTP
- confd+etcd+nginx 實現簡單服務發現Nginx
- Java使用Netty實現簡單的RPCJavaNettyRPC
- 如何快速搭建一個 “簡單模式” 的微服務架構模式微服務架構
- 【小白學PyTorch】15 TF2實現一個簡單的服裝分類任務PyTorchTF2
- 使用 Docker 和 Node 快速實現一個線上的 QRCode 解碼服務Docker
- 使用 Docker 和 Nginx 實現簡單目錄索引服務DockerNginx索引
- php實現一個簡單的socketPHP
- 實現一個簡單的TomcatTomcat
- 實現一個簡單的 RESTful APIRESTAPI