Go標準包RPC的使用

2022-07-11 18:48:10 字數 1740 閱讀 4183

package main

import (

"errors"

"fmt"

"net"

"net/rpc"

)// rpc服務端

// 實現兩個rpc介面

// 1. 計算除數和被除數兩個數的乘積,返回乘積結果

// 2. 計算除數和被除數兩個數的除法結果,返回商和餘數

// 請求引數結構體

type requestparam struct

// 乘積計算結果直接返回int型別

// 返回兩個數的商和餘數響應結構體

type divisionresponse struct

// 定義空結構體,用於繫結方法

type calc struct

// rpc通訊中結構體結構`(request,*response) error`

// 計算乘法

func (c *calc) multi(req requestparam, rsp *int) error

// 計算除法

func (c *calc) sub(req requestparam, rsp *divisionresponse) error

rsp.quotient = req.dividend / req.divisor

rsp.remainder = req.dividend % req.divisor

return nil

}func main()

/* 通過http方式監聽rpc */

// 設定http handle

// 啟動http服務監聽

/* 直接通過socket方式監聽rpc服務 */

listener, err := net.listen("tcp", ":8080")

if err != nil

rpc.accept(listener)

}

package main

import (

"fmt"

"net/rpc"

)// rpc客戶端

// 請求引數結構體

type requestparam struct

// 乘積計算結果直接返回int型別

// 返回兩個數的商和餘數響應結構體

type divisionresponse struct

func main()

defer rpcclient.close()

// 計算乘法

var multiresult int

err = rpcclient.call("calc.multi", requestparam, &multiresult)

if err != nil

fmt.printf("乘積: %d\n", multiresult)

var subresult divisionresponse

err = rpcclient.call("calc.sub", requestparam, &subresult)

if err != nil

fmt.printf("商: %d, 餘數: %d\n", subresult.quotient, subresult.remainder)

}

golang官方rpc包的使用

rpc remote rrocedure call,遠端過程呼叫 是乙個計算機通訊協議。rpc協議假定某些傳輸協議的存在,如tcp和udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc採用c s模式,請求程式就是乙個客戶機,而服務提供程式就是乙個伺服器。首先...

GO標準包之fmt log

在fmt包中,主要是輸入和輸出 對於輸出 print 有三大類 pringf fprintf sprintf print fprint sprint println fprintln sprintln 通過書寫可以看出 第一行的按照格式化文字輸出內容 第二行輸出時不會換行 第三行的會換行 而第一列的...

go語言標準包之TCP

1.tcpconn 在tcp連線中,服務端是乙個標準的listen和accept結構 在net包中有乙個tcpconn類,用它來作為客戶端和伺服器互動的通道 func c tcpconn write b byte n int,err os.error func c tcpconn read b by...