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

  • 相关阅读:
    11gR2 RAC手动添加节点数据库实例 转
    Oracle 11g rac添加删除集群数据库
    11gR2RAC更换CRS磁盘组文档
    Java堆、栈和常量池
    牛人博客
    异常的定义和分类
    java中Proxy(代理与动态代理)
    详解java定时任务
    世界上最大的风不是台风,而是枕边风
    tomcat 日志catalina.out 按天自动分割 设定时任务定时清除
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4295285.html
Copyright © 2011-2022 走看看