Go 语言极速入门14 - jsonrpc 最简姿势

服务定义

package rpcdemo

import "errors"

// 服务
type DemoService struct {
}

// 参数
type Args struct {
    A, B int
}

// jsonrpc 的服务需要定义为参入参数和传出参数的格式
// 传出参数必须为指针格式
func (e DemoService) DIV(args Args, result *float64) error {
    if args.B == 0 {
        return errors.New("division by zero")
    }

    *result = float64(args.A) / float64(args.B)
    return nil
}

服务端

package main

import (
    "github.com/zhaojigang/crawler/rpc"
    "log"
    "net"
    "net/rpc"
    "net/rpc/jsonrpc"
)

func main() {
    // 注册服务
    rpc.Register(rpcdemo.DemoService{})
    // 启动 server
    listener, err := net.Listen("tcp", "127.0.0.1:1234")

    if err != nil {
        panic(err)
    }

    for {
        // 不断连接服务
        conn, err := listener.Accept()
        if err != nil {
            log.Printf("accept error, %v", err)
            continue
        }
        // 使用 Goroutine:ServeConn runs the JSON-RPC server on a single connection.
        go jsonrpc.ServeConn(conn)
    }
}

客户端

package main

import (
    "fmt"
    "github.com/zhaojigang/crawler/rpc"
    "log"
    "net/rpc/jsonrpc"
)

func main() {
    // 连接server并创建jsonrpc-client
    client, err := jsonrpc.Dial("tcp", "127.0.0.1:1234")
    if err != nil {
        log.Printf("create jsonrpc client error")
    }

    var result float64
    // 发起调用
    err = client.Call("DemoService.DIV", rpcdemo.Args{3, 4}, &result)
    if err != nil {
        log.Printf("call error")
    }
    fmt.Println(result)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,456评论 19 139
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,351评论 0 10
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 2,104评论 1 37
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,231评论 6 13
  • 只有我自己知道我心里有多难受,那又怎样,是为了获得别人的可怜,还是在气愤无论对他们有多好,其实在他们眼里我还是外人...
    逆袭的美人鱼阅读 405评论 0 1

友情链接更多精彩内容