zoukankan      html  css  js  c++  java
  • golang rpc 简单范例

    RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

    它的工作流程如下图:

    image

     

    golang 使用 RPC的例子如下:

    服务器端代码:

    这里暴露了一个RPC接口,一个HTTP接口

    package main

    import (
        "fmt"
        "io"
        "net"
        "net/http"
        "net/rpc"
    )

    type Watcher int

    func (w *Watcher) GetInfo(arg int, result *int) error {
        *result = 1
        return nil
    }

    func main() {

        http.HandleFunc("/ghj1976", Ghj1976Test)

        watcher := new(Watcher)
        rpc.Register(watcher)
        rpc.HandleHTTP()

        l, err := net.Listen("tcp", ":1234")
        if err != nil {
            fmt.Println("监听失败,端口可能已经被占用")
        }
        fmt.Println("正在监听1234端口")
        http.Serve(l, nil)
    }

    func Ghj1976Test(w http.ResponseWriter, r *http.Request) {
        io.WriteString(w, "<html><body>ghj1976-123</body></html>")
    }

     

    客户端代码:

    package main

    import (
        "fmt"
        "net/rpc"
    )

    func main() {
        client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234")
        if err != nil {
            fmt.Println("链接rpc服务器失败:", err)
        }
        var reply int
        err = client.Call("Watcher.GetInfo", 1, &reply)
        if err != nil {
            fmt.Println("调用远程服务失败", err)
        }
        fmt.Println("远程服务返回结果:", reply)
    }

     

    服务器端代码执行截图

    image

    客户端代码执行截图

    image

    HTTP网页执行截图:

    image

  • 相关阅读:
    mysql 存储过程实例
    国际会议查询方式和相关会议
    用 WEKA 进行数据挖掘,第 1 部分: 简介和回归(转)
    java实现甘特图的2种方法:SwiftGantt和Jfree (转)
    通过jxl 读取excel 文件中的日期,并计算时间间隔
    R 操作矩阵和计算SVD的基本操作记录
    SVD java 算法实现
    聚类方法简介
    Kolmogorov-Smirnov检验
    Java Thread 多线程 介绍
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4295285.html
Copyright © 2011-2022 走看看