本文实例讲述了golang两种调用rpc的方法。分享给大家供大家参考,具体如下:

golang的rpc有两种方法进行调用,一种是rpc例子中给的:

package main

import (

"net/rpc"

"net/http"

"log"

"net"

"time"

)

type Args struct {

A, B int

}

type Arith int

func (t *Arith) Multiply(args *Args, reply *([]string)) error {

*reply = append(*reply, "test")

return nil

}

func main() {

arith := new(Arith)

rpc.Register(arith)

rpc.HandleHTTP()

l, e := net.Listen("tcp", ":1234")

if e != nil {

log.Fatal("listen error:", e)

}

go http.Serve(l, nil)

time.Sleep(5 * time.Second)

client, err := rpc.DialHTTP("tcp", "127.0.0.1" + ":1234")

if err != nil {

log.Fatal("dialing:", err)

}

args := &Args{7,8}

reply := make([]string, 10)

err = client.Call("Arith.Multiply", args, &reply)

if err != nil {

log.Fatal("arith error:", err)

}

log.Println(reply)

}

另一种是使用NewServer

这种是当rpc已经注册的时候就要使用了另外一种了。即一个server只能在DefaultRPC中注册一种类型。

当Server使用rpc.NewServer的时候,client也需要进行下改动了

package main

import (

"net/rpc"

//"net/http"

"log"

"net"

"time"

)

type Args struct {

A, B int

}

type Arith int

func (t *Arith) Multiply(args *Args, reply *([]string)) error {

*reply = append(*reply, "test")

return nil

}

func main() {

newServer := rpc.NewServer()

newServer.Register(new(Arith))

l, e := net.Listen("tcp", "127.0.0.1:1234") // any available address

if e != nil {

log.Fatalf("net.Listen tcp :0: %v", e)

}

go newServer.Accept(l)

newServer.HandleHTTP("/foo", "/bar")

time.Sleep(2 * time.Second)

address, err := net.ResolveTCPAddr("tcp", "127.0.0.1:1234")

if err != nil {

panic(err)

}

conn, _ := net.DialTCP("tcp", nil, address)

defer conn.Close()

client := rpc.NewClient(conn)

defer client.Close()

args := &Args{7,8}

reply := make([]string, 10)

err = client.Call("Arith.Multiply", args, &reply)

if err != nil {

log.Fatal("arith error:", err)

}

log.Println(reply)

}

第二个例子中的

newServer.HandleHTTP("/foo", "/bar")

可以任意设置,第一个例子其实是设置了默认的两个

这里也顺便将reply作为[]slice的例子给演示了下

希望本文所述对大家Go语言程序设计有所帮助。

golang java rpc_golang两种调用rpc的方法相关推荐

  1. Java基础_17 | Java多线程程序设计(Java中两种创建线程的方法、多线程之间的同步和互斥)

    1. 多线程实现最核心的机制 一个程序在其执行过程中, 可以产生多个线程, 形成多条执行线索.,每条线程,有产生.存在和消亡的过程,并且独立完成各自的功能,互不干扰. 多线程程序运行只占用一个CPU, ...

  2. Java多线程两种实现方式的对比

    Java多线程两种实现方式的对比 一种,直接继承Thread类 一种,实现Thread类的Runnable接口 两种方式的区别 比如,售票厅有四个窗口,可以发售某日某次列出的100张车票,此时,100 ...

  3. java的两种运行方式Applet和Application你真的懂吗

    对两者的简介 他们是java的两种程序,能够独立运行的程序称为Java应用程序也包含我们正常写的java文件所生成的可执行程序(Application)其运行和普通的java文件相同.Java语言还有 ...

  4. java中两种异常类型_Java中的三种异常类型

    java中两种异常类型 Errors are the bane of users and programmers alike. Developers obviously don't want thei ...

  5. java的两种比较器

    比较算法 日常生活中,如果想比较两个数的大小,可采用做差的方式,做差结果的正负可用来判断两个数的大小.假设A - B = C 若整数C > 0,说明 A > B ; 若整数C = 0,说明 ...

  6. Java中两种抛出异常的方式

    Java中两种抛出异常的方式 在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常. 直接抛出异常是在方法中用关键字throw引发明确的异常.当thro ...

  7. 十进制转二进制,用java的两种基本方法,适合新手

    十进制转二进制,用java的两种基本方法,适合新手 1.String字符串拼接法 package cn.sxt;import java.util.Scanner;/*** 6. 从键盘输入某个十进制整 ...

  8. Java实现两种方式 RSA签名, RSA签名校验

    Java实现两种方式 RSA签名, RSA签名校验 通过 .keystore密钥文件实现 生成密钥文件 test2.keystore 相关使用 通过密钥生成器实现 Byte数据转换成 Hex字符串 相 ...

  9. PyQt5随笔:Qtdesigner设计转换而来的界面.py文件两种调用方式

    PyQt5随笔:Qtdesigner设计转换而来的界面.py文件两种调用方式 文章目录 PyQt5随笔:Qtdesigner设计转换而来的界面.py文件两种调用方式 1.前言 2.方式一:另建 py ...

最新文章

  1. 浅谈无人机的应用场景
  2. 【spring cloud zookeeper】KeeperErrorCode = Unimplemented for
  3. 假期数据结构学习总结
  4. 风控人需知:信贷风险流程中的决策矩阵与实操
  5. nyoj 78:圈水池 【凸包入门】
  6. 一文了解H5照片上传过程
  7. 分析reduce()的原理
  8. Linux系统(一)文件和目录理解
  9. 怎么压缩PPT大小?PPT太大了怎么压缩?
  10. 如何将Vue中表格数据,以Excel格式导出?报saveAs错误如何解决?
  11. gimp 架构_GIMP添加插件..doc
  12. UE5 建模(一)Shapes
  13. 如何让自己的博客主动被搜索引擎收录
  14. Kotlin-Android世界的一股清流-Package
  15. AI绘画软件排行榜,手机AI绘画排名推荐
  16. 2018 年物联网发展五大趋势预测
  17. ps入门教程、ps修图基本工具使用方法视频教学
  18. blog6-beta_2
  19. React+阿里云Aliplayer播放器实现rtmp直播(推流时间差,重启播放器,计时观看)
  20. 无穷积分的符号计算及其MATLAB程序

热门文章

  1. PKM(个人知识管理)类软件收集(偶尔更新列表)
  2. 例子简单说说C# ref和out
  3. 关于VC++6.0中getline函数的一个bug
  4. IBM SOA[ESB,BPM,Portal等]基础架构图解
  5. 密码强弱提示(27)
  6. 游戏开发中的数学和物理算法(7):角度 vs 弧度
  7. Sandy引擎学习笔记:摄影机
  8. 数据结构之顺序表(一)
  9. 图tp delDataById问题
  10. HDU 5410 CRB and His Birthday ——(完全背包变形)