• <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
            <2016年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678


            專注即時通訊及網游服務端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標準模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215339
            • 排名 - 118

            最新評論

            閱讀排行榜

            go使用rpc
            RPC是遠程過程調用的縮寫(Remote Procedure Call),通俗地說就是調用遠處的一個函數,是分布式系統(tǒng)中不同節(jié)點間流行的通信方式。Go語言的標準庫提供了一個簡單的RPC實現
            server端
            構造一個Cqh類型,其中的Test方法用于測試打印功能
            注意:Test方法必須滿足Go語言的RPC規(guī)則:
            方法只能有兩個可序列化的參數
            其中第二個參數是指針類型,并且返回一個error類型,同時必須是公開的方法。
            func (p *Cqh) Test(request string, reply *string) error {
                *reply = "test:" + request
                return nil
            }
            服務端程序如下:
            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函數調用會將對象類型中所有滿足RPC規(guī)則的對象方法注冊為RPC函數,所有注冊的方法會放在“Cqh”服務空間之下。然后我們建立非阻塞的TCP鏈接,通過rpc.ServeConn函數在該TCP鏈接上為對方提供RPC服務。
             
            client端
            Go語言的RPC庫最簡單的使用方式是通過Client.Call方法進行同步阻塞調用,該方法的實現如下:
            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方法進行一次異步調用,返回一個表示這次調用的Call結構體。然后等待Call結構體的Done管道返回調用結果。
            客戶端程序如下:
            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撥號RPC服務,然后通過client.Call調用具體的RPC方法。在調用client.Call時,第一個參數是用點號鏈接的RPC服務名字和方法名字,第二和第三個參數分別我們定義RPC方法的兩個參數。
            客戶端運行后輸出如下:
            test:hello
             
            由此以看出RPC的使用其實非常簡單
            posted on 2021-09-14 11:16 思月行云 閱讀(758) 評論(0)  編輯 收藏 引用 所屬分類: Golang
            久久99国产精品久久99果冻传媒 | 色综合久久夜色精品国产| 国产99久久精品一区二区| 7国产欧美日韩综合天堂中文久久久久| 亚洲AV日韩精品久久久久久 | 日韩精品久久久久久| 国产农村妇女毛片精品久久| 久久亚洲天堂| 韩国免费A级毛片久久| 久久国产综合精品五月天| 亚洲精品白浆高清久久久久久| 国产韩国精品一区二区三区久久 | 中文字幕无码av激情不卡久久| 97久久国产露脸精品国产| 久久99免费视频| 久久影视国产亚洲| 久久国产精品久久| 亚洲AV无码一区东京热久久| 精品久久久久久国产牛牛app | 国产高潮国产高潮久久久91| 精品久久人人爽天天玩人人妻| 7国产欧美日韩综合天堂中文久久久久 | 久久精品青青草原伊人| 国产精品久久久久久久久久免费| 亚洲精品乱码久久久久久蜜桃不卡| 少妇久久久久久被弄到高潮| 久久精品国产亚洲沈樵| 欧美一区二区三区久久综合| 亚洲国产精品综合久久网络| 久久久WWW成人| 久久精品国产亚洲AV不卡| 久久九九青青国产精品| 久久久老熟女一区二区三区| 四虎国产精品成人免费久久| 久久久噜噜噜久久中文字幕色伊伊| 精品久久久久久久久中文字幕| 漂亮人妻被黑人久久精品| 热99RE久久精品这里都是精品免费| 久久久久国产精品麻豆AR影院| 国产成人精品久久亚洲| 国产精品欧美久久久久天天影视|