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 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

《Android外部存储》

| 导语 外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更。我也曾疑惑过,为什么一个简简单单外部存储,会存在存在...

4185
来自专栏编程思想之路

带你解锁蓝牙skill(三)

蓝牙这块儿算是系统中的一个大块儿,刚开始分析确实很容易没有头绪,所以在进入庞大的源码之前先确定一个分析顺序,也好避免越学越乱。 对于源码的分析不外乎wh...

2027
来自专栏用户2442861的专栏

cmake教程5-macro宏定义以及传递参数给源文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

873
来自专栏后端技术探索

使用Swoole异步发送邮件

最近做公司的一个管理系统,需要把每天的统计信息发送到领导的邮箱。由于使用SMTP协议发送邮件的速度太慢,所以只能异步发送。刚开始实现了一个基于php-reque...

611
来自专栏24K纯开源

CMake结合Visual Studio中开发Qt应用程序注意事项

1962
来自专栏木宛城主

PowerShell 批量签入SharePoint Document Library中的文件

由于某个文档库设置了编辑前签出功能,导致批量导入文件时这些文件默认的状态都被签出了。如果手动签入则费时费力,故利用PowerShell来实现批量签入Docume...

20010
来自专栏bboysoul

信息收集工具(Th3inspector Tool)安装使用体验

https://github.com/Moham3dRiahi/Th3inspector

783
来自专栏海天一树

爬取百度百科5A景点摘要并实现分词

这里baike_spider.py用来爬取景点摘要,内容放在senic_spots目录中; cut_word.py用来分词,分词结果放在cut_word_res...

522
来自专栏Keegan小钢

App环境分离的实现:iOS篇

说到App环境分离在iOS的实现,我曾在iOS技术群里问过:如何实现在同一台手机能同时安装同个应用的测试和生产版本?应用名称要有区分,图标也要有所区别。不要手动...

1103
来自专栏ppjun专栏

Android十八章:Android Studio打包jar文件

通常我们AndroidStudio项目中里面包括了一个library,在library对应的build/intermediates/bundles/releas...

652

扫码关注云+社区