• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2018年9月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456


            專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺尊重?。∪鐬槟鷰聿槐?,請(qǐng)于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊(cè)

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216726
            • 排名 - 118

            最新評(píng)論

            閱讀排行榜

            go使用rpc
            RPC是遠(yuǎn)程過程調(diào)用的縮寫(Remote Procedure Call),通俗地說就是調(diào)用遠(yuǎn)處的一個(gè)函數(shù),是分布式系統(tǒng)中不同節(jié)點(diǎn)間流行的通信方式。Go語言的標(biāo)準(zhǔn)庫提供了一個(gè)簡(jiǎn)單的RPC實(shí)現(xiàn)
            server端
            構(gòu)造一個(gè)Cqh類型,其中的Test方法用于測(cè)試打印功能
            注意:Test方法必須滿足Go語言的RPC規(guī)則:
            方法只能有兩個(gè)可序列化的參數(shù)
            其中第二個(gè)參數(shù)是指針類型,并且返回一個(gè)error類型,同時(shí)必須是公開的方法。
            func (p *Cqh) Test(request string, reply *string) error {
                *reply = "test:" + request
                return nil
            }
            服務(wù)端程序如下:
            func main() {
                rpc.RegisterName("Cqh", new(Cqh))
             
                listener, err := net.Listen("tcp", ":1234")
                if err != nil {
                    log.Fatal("ListenTCP error", err)
                }
             
                for {
                    conn, err := listener.Accept()
                    if err != nil {
                        log.Fatal("Accept error:", err)
                    }
                    rpc.ServeConn(conn)
                }
            }
            其中rpc.Register函數(shù)調(diào)用會(huì)將對(duì)象類型中所有滿足RPC規(guī)則的對(duì)象方法注冊(cè)為RPC函數(shù),所有注冊(cè)的方法會(huì)放在“Cqh”服務(wù)空間之下。然后我們建立非阻塞的TCP鏈接,通過rpc.ServeConn函數(shù)在該TCP鏈接上為對(duì)方提供RPC服務(wù)。
             
            client端
            Go語言的RPC庫最簡(jiǎn)單的使用方式是通過Client.Call方法進(jìn)行同步阻塞調(diào)用,該方法的實(shí)現(xiàn)如下:
            func (client *Client) Call(serviceMethod string, args interface{}, reply interface{}) error {
                call := <-client.Go(serviceMethod, args, reply, make(chan *Call, 1)).Done
                return call.Error
            }
            首先通過Client.Go方法進(jìn)行一次異步調(diào)用,返回一個(gè)表示這次調(diào)用的Call結(jié)構(gòu)體。然后等待Call結(jié)構(gòu)體的Done管道返回調(diào)用結(jié)果。
            客戶端程序如下:
            package main
             
            import (
                "net/rpc"
                "log"
                "fmt"
            )
             
            func main() {
                client, err := rpc.Dial("tcp", ":1234")
                if err != nil {
                    log.Fatal("dialing", err)
                }
             
                var reply string
             
                err = client.Call("Cqh.Test", "hello", &reply)
                if err != nil {
                    log.Fatal(err)
                }
                fmt.Println(reply)
            }
            rpc.Dial撥號(hào)RPC服務(wù),然后通過client.Call調(diào)用具體的RPC方法。在調(diào)用client.Call時(shí),第一個(gè)參數(shù)是用點(diǎn)號(hào)鏈接的RPC服務(wù)名字和方法名字,第二和第三個(gè)參數(shù)分別我們定義RPC方法的兩個(gè)參數(shù)。
            客戶端運(yùn)行后輸出如下:
            test:hello
             
            由此以看出RPC的使用其實(shí)非常簡(jiǎn)單
            posted on 2021-09-14 11:16 思月行云 閱讀(765) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Golang
            999久久久免费国产精品播放| 久久久精品国产sm调教网站| 久久亚洲春色中文字幕久久久| 一级女性全黄久久生活片免费 | 免费一级做a爰片久久毛片潮| 久久久久亚洲AV无码专区网站| 人妻无码精品久久亚瑟影视| 亚洲精品乱码久久久久久蜜桃图片 | 伊人久久大香线蕉av不卡| 亚洲va久久久噜噜噜久久狠狠| 久久99国产综合精品女同| 国产综合成人久久大片91| 亚洲午夜久久久影院| 97久久精品午夜一区二区| 日批日出水久久亚洲精品tv| 亚洲国产精品无码久久一线| 久久国产免费| 久久综合狠狠综合久久综合88| 久久精品一区二区| 久久精品国产日本波多野结衣| 国产精品久久久久9999| 久久亚洲精品无码aⅴ大香| 久久成人影院精品777| 伊人久久大香线蕉综合Av| 伊人伊成久久人综合网777| 久久福利青草精品资源站免费| 狠狠色丁香婷婷久久综合| 国产一区二区精品久久凹凸| 国产精品一区二区久久不卡 | 色婷婷综合久久久中文字幕 | 亚洲国产一成久久精品国产成人综合| 熟妇人妻久久中文字幕| 偷偷做久久久久网站| 一日本道伊人久久综合影| 国产精品无码久久综合网| 久久精品9988| 久久精品国产精品国产精品污| 亚洲中文字幕无码久久2017| 欧美黑人激情性久久| 久久这里的只有是精品23| 国产精品成人久久久|