golang学习之rpc实例

rpc(远程过程调用),可以像调用本地程序一样调用远端服务,rpc分为http方式和tcp连接方式,使用http的rpc调用如下:

首先是server端:

// rpc_server project main.go
package main

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

type Watcher int

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

func main() {
    watcher := new(Watcher)
    rpc.Register(watcher)
    rpc.HandleHTTP()
    listener, err := net.Listen("tcp", ":8888")
    if err != nil {
        fmt.Println("监听失败,端口可能被占用")
    }
    fmt.Println("正在监听8888端口")
    go http.Serve(listener, nil)
}

然后是client端:

// rpc_client project main.go
package main

import (
    "fmt"
    "net/rpc"
)

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

调用结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闵开慧

在eclipse中运行hbase时显示Could not resolve the DNS na...

ERROR hbase.HServerAddress: Could not resolve the DNS name of ubuntu118 ...

3116
来自专栏杨建荣的学习笔记

EM agent无法启动的原因及分析 (r6笔记第75天)

昨天收到一条报警短信,短信内容大体如下: Agent is Unreachable(REASON=javax.net.ssl.SSLPeerUnverified...

3515
来自专栏Python

将不同级别的logging 日志信息写入不同文件

910
来自专栏Golang语言社区

Linux Golang 环境搭建(版本1.6.2)

1、下载安装包 https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz 2、解压缩安装...

3465
来自专栏杨建荣的学习笔记

sandbox和MHA快速测试(r12笔记第32天)

昨天写了一篇使用脚本搭建一主多从的脚本之后,奇龙兄建议我看看sandbox的功能,可以秒级搭建主从环境,简单试了下,确实很好很强大。 环境部署其实很简单,...

3456
来自专栏zhangdd.com

[ERR] Node xxxxx is not empty. Either the node already knows other nodes (check with CLUSTER NODES)

1)、停止所有redis进程,将需要新增的节点下aof、rdb等本地备份文件删除;

1134
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (1)

本文内容基本完全来自于Identity Server 4官方文档: https://identityserver4.readthedocs.io/ 官方文档很详...

43710
来自专栏北京马哥教育

如何快速截取某段时间内的日志

在排除故障时,需要分析发生故障的原因,避免再次出现同样的问题,需要对日志进行分析,截取故障前后时间段的日志。通常用正则表达式来获取某段时间的内的日志,比较繁琐。...

2626
来自专栏后端云

vm被systemd删除

发现计算节点重启后,所有的该节点上的vm被删除了,查看vm对应的qemu日志,qemu-kvm: terminating on signal 15 from p...

844
来自专栏北京马哥教育

性能测试与持续集成(JMeter+Jenkins)

目的 将性能测试与持续集成挂接起来 性能测试: JMeter 持续集成: Jenkins JMeter 下载JMeter,官网: http://jmeter.a...

3545

扫码关注云+社区