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的例子给演示了下

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

  1. golang rpc的两种调用方法

    golang的rpc有两种方法进行调用,一种是rpc例子中给的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...

  2. 对 Python 字典排序的两种简单方法

    引言 Dictionary 是一种重要的数据结构,它通过将 key 与 value 进行映射来存储数据.Python 中的默认字典是无序数据结构.与列表一样,我们可以使用 sorted()函数按键对字 ...

  3. Avro RPC的两种实现方法:静态实现和动态实现

    使用Avro可实现如下几种方式的轻量级RPC, 每种方式都可用动态编码和静态编码来实现: HTTP: HttpServer HttpTransceiver UDP DatagramServer Dat ...

  4. 【ASP.NET】——aspx与aspx.cs两种调用方法

    [第一种] 在.aspx.cs中写 public partial class UserInfoList : System.Web.UI.Page{public string StrHtml { get ...

  5. 记--Python --日常练习的两种思考方法

    把下列学生的成绩 按 90-100,80-89,70-79,60-69,60以下 分为5组stu_list = [['李渊', 82], ['李世民', 7], ['侯君集', 5], ['李靖', ...

  6. python使用方法视频-Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  7. python怎么导入视频-Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  8. golang java rpc_golang两种调用rpc的方法

    本文实例讲述了golang两种调用rpc的方法.分享给大家供大家参考,具体如下: golang的rpc有两种方法进行调用,一种是rpc例子中给的: package main import ( &quo ...

  9. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码

    Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo

最新文章

  1. java 彩票系统_JAVA版彩票随机生成系统
  2. Java中float类型精度问题
  3. python3.7新功能_2018-11-08安装Python3.7详解
  4. [云炬创业管理笔记]第二章测试5
  5. 个人作业——软件工程实践总结
  6. hihoCoder 1092 : Have Lunch Together
  7. python:linux中升级python版本
  8. 云服务器怎么执行sql文件在哪里,总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例...
  9. 安全平台基于ArcGIS构建安全的移动端App
  10. Ubuntu“无法解析或打开软件包的列表或是状态文件”的解决办法。
  11. 流媒体技术学习笔记之(十五)FFmpeg编码遇到的错误、警告、Debug记录
  12. 微信终于良心一回,更新了语音识别功能可识别粤语,广东人有福了
  13. 解题报告 noi 2005 智慧珠游戏(BT 搜索)
  14. JAVA创建对象有哪几种方式
  15. SC16IS752调试
  16. Apollo星火计划学习笔记——第一讲 使用Apollo学习自动驾驶
  17. 2019 最烂密码排行榜大曝光!网友:已中招
  18. 你知道怎样进行芝麻动态vps速度测试吗?
  19. Ps如何调出一寸或者二寸等规定尺寸的照片
  20. 计算机系统的储存单位及换算关系,计算机储存单位和换算关系

热门文章

  1. C#_XXX事件 的重载均与委托System.EventHandler不匹配
  2. 【正式发布】火星人敏捷开发手册2012-12-25(基于Scrum的敏捷开发免费培训教材及公司内部宣传材料)...
  3. HSRP的初步解析及典型应用2
  4. 办公自动化及工作流技术
  5. Exposing Windows Forms Controls as ActiveX controls
  6. Spring Bean的生命周期以及IOC源码解析
  7. cad怎么向下位移_CAD制图初学入门教程:阵列功能的使用技巧
  8. php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
  9. c语言实现链表结构6,用c语言实现的链表结构--数据结构实验
  10. 小样本点云深度学习库_合成鲁棒的对抗样本来欺骗深度学习分类器