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

相关文章

来自专栏程序员宝库

Vue 项目 SSR 改造实战

前言 我们先看“疗效”,你可以打开我的博客 (www.u3xyz.com),通过查看源代码来看SSR直出效果。我的博客已经快上线一年了,但不吹不黑,访问量非常地...

7446
来自专栏一个会写诗的程序员的博客

功能强大的jQuery图片查看器插件

1921
来自专栏雪胖纸的玩蛇日常

Vue+koa2开发一款全栈小程序(6.个人中心)

如果报错(往往因为mysql的版本8.0什么的,加密方式导致初始化脚本报错),解决办法

2002
来自专栏全栈之路

关于真机测试的几点感悟

772
来自专栏CRPER折腾记

Angular 2 + 折腾记 :(8) 动手写一个不怎么靠谱的上传组件

上传功能在任何一个网站中的地位都是举足轻重的,这篇文章主要扯下如何实现一个上传组件

1281
来自专栏从零开始学自动化测试

Fiddler抓包10-会话框添加请求类型(get、post)

前言 在使用fiddler抓包的时候,查看请求类型get和post每次只有点开该请求,在Inspectors才能查看get和post请求,不太方便。于是可以在会...

2144
来自专栏landv

C#_FindWindow

1904
来自专栏猛牛哥的博客

API获取窗口滚动条位置

1043
来自专栏技术博客

ExtJs七(ExtJs Mvc创建ViewPort)

在4.1的时候,要先创建一个扩展于Ext.app.Application的类,然后用create创建它的实例来开始应用程序的。而在4.1.1,则可直接调用app...

934
来自专栏coding for love

浏览器加载解析渲染机制的全面解析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

951

扫码关注云+社区