真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang中rpc包如何使用

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)golang中rpc包如何使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為南湖企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),南湖網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

介紹

golang的rpc支持三個(gè)級(jí)別的RPC:TCP、HTTP、JSONRPC。但Go的RPC包是獨(dú)一無二的RPC,它和傳統(tǒng)的RPC系統(tǒng)不同,它只支持Go開發(fā)的服務(wù)器與客戶端之間的交互,因?yàn)樵趦?nèi)部,它們采用了Gob來編碼。

Go RPC的函數(shù)只有符合下面的條件才能被遠(yuǎn)程訪問,不然會(huì)被忽略,詳細(xì)的要求如下:

  • 函數(shù)必須是導(dǎo)出的(首字母大寫)

  • 必須有兩個(gè)導(dǎo)出類型的參數(shù),

  • 第一個(gè)參數(shù)是接收的參數(shù),第二個(gè)參數(shù)是返回給客- 戶端的參數(shù),第二個(gè)參數(shù)必須是指針類型的

  • 函數(shù)還要有一個(gè)返回值error

舉個(gè)例子,正確的RPC函數(shù)格式如下:

func (t *T) MethodName(argType T1, replyType *T2) error

T、T1和T2類型必須能被encoding/gob包編解碼。

示例

舉一個(gè)http的例子。

下面是http服務(wù)器端的代碼:

package mainimport ("errors""net""net/rpc""log""net/http")type Args struct {
   
   
   
	A, B int}type Quotient struct {
   
   
   
	Quo, Rem int}type Arith intfunc (t *Arith) Multiply(args *Args, reply *int) error {
   
   
   *reply = args.A * args.B	return nil}func (t *Arith) Divide(args *Args, quo *Quotient) error {
   
   
   if args.B == 0 {
   
   
   return errors.New("divide by zero")}
	quo.Quo = args.A / args.B
	quo.Rem = args.A % args.B	return nil}func main() {
   
   
   
	arith := new(Arith)
	rpc.Register(arith)
	rpc.HandleHTTP()
	l, e := net.Listen("tcp", ":1234")if e != nil {
   
   
   
		log.Fatal("listen error:", e)}
	http.Serve(l, nil)}

簡(jiǎn)單分析一下上面的例子,先實(shí)例化了一個(gè)Arith對(duì)象arith,然后給arith注冊(cè)了rpc服務(wù),然后把rpc掛載到http服務(wù)上面,當(dāng)http服務(wù)打開的時(shí)候我們就可以通過rpc客戶端來調(diào)用arith中符合rpc標(biāo)準(zhǔn)的的方法了。

請(qǐng)看客戶端的代碼:

package mainimport ("net/rpc""log""fmt")type Args struct {
   
   
   
	A, B int}type Quotient struct {
   
   
   
	Quo, Rem int}func main()  {
   
   
   
	client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234")if err != nil {
   
   
   
		log.Fatal("dialing:", err)}// Synchronous call
	args := &Args{
   
   
   7,8}var reply int
	err = client.Call("Arith.Multiply", args, &reply)if err != nil {
   
   
   
		log.Fatal("arith error:", err)}
	fmt.Printf("Arith: %d*%d=%d\n", args.A, args.B, reply)// Asynchronous call
	quotient := new(Quotient)
	divCall := client.Go("Arith.Divide", args, quotient, nil)
	replyCall := <-divCall.Done	// will be equal to divCallif replyCall.Error != nil {
   
   
   
		log.Fatal("arith error:", replyCall.Error)}
	fmt.Printf("Arith: %d/%d=%d...%d", args.A, args.B, quotient.Quo, quotient.Rem)// check errors, print, etc.}

簡(jiǎn)單說明下,先用rpc的DialHTTP方法連接服務(wù)器端,調(diào)用服務(wù)器端的函數(shù)就要使用Call方法了,Call方法的參數(shù)和返回值已經(jīng)很清晰的表述出rpc整體的調(diào)用邏輯了。

我們把服務(wù)器端跑起來,再把客戶端跑起來,這時(shí)候客戶端會(huì)輸出:

Arith: 7*8=56
Arith: 7/8=0...7

下面是我在阿里云CentOS8服務(wù)器下的測(cè)試結(jié)果截圖,如下圖所示:
golang中rpc包如何使用

本文參與“OSC源創(chuàng)計(jì)劃”,歡迎正在閱讀的你也加入,一起分享。

上述就是小編為大家分享的golang中rpc包如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:golang中rpc包如何使用
轉(zhuǎn)載來于:http://weahome.cn/article/gdjced.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部