golang python rpc_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的例子给演示了下
golang python rpc_golang rpc的两种调用方法相关推荐
- 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 ...
- 对 Python 字典排序的两种简单方法
引言 Dictionary 是一种重要的数据结构,它通过将 key 与 value 进行映射来存储数据.Python 中的默认字典是无序数据结构.与列表一样,我们可以使用 sorted()函数按键对字 ...
- Avro RPC的两种实现方法:静态实现和动态实现
使用Avro可实现如下几种方式的轻量级RPC, 每种方式都可用动态编码和静态编码来实现: HTTP: HttpServer HttpTransceiver UDP DatagramServer Dat ...
- 【ASP.NET】——aspx与aspx.cs两种调用方法
[第一种] 在.aspx.cs中写 public partial class UserInfoList : System.Web.UI.Page{public string StrHtml { get ...
- 记--Python --日常练习的两种思考方法
把下列学生的成绩 按 90-100,80-89,70-79,60-69,60以下 分为5组stu_list = [['李渊', 82], ['李世民', 7], ['侯君集', 5], ['李靖', ...
- python使用方法视频-Python读取视频的两种方法(imageio和cv2)
用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...
- python怎么导入视频-Python读取视频的两种方法(imageio和cv2)
用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...
- golang java rpc_golang两种调用rpc的方法
本文实例讲述了golang两种调用rpc的方法.分享给大家供大家参考,具体如下: golang的rpc有两种方法进行调用,一种是rpc例子中给的: package main import ( &quo ...
- Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码
Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo
最新文章
- java 彩票系统_JAVA版彩票随机生成系统
- Java中float类型精度问题
- python3.7新功能_2018-11-08安装Python3.7详解
- [云炬创业管理笔记]第二章测试5
- 个人作业——软件工程实践总结
- hihoCoder 1092 : Have Lunch Together
- python:linux中升级python版本
- 云服务器怎么执行sql文件在哪里,总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例...
- 安全平台基于ArcGIS构建安全的移动端App
- Ubuntu“无法解析或打开软件包的列表或是状态文件”的解决办法。
- 流媒体技术学习笔记之(十五)FFmpeg编码遇到的错误、警告、Debug记录
- 微信终于良心一回,更新了语音识别功能可识别粤语,广东人有福了
- 解题报告 noi 2005 智慧珠游戏(BT 搜索)
- JAVA创建对象有哪几种方式
- SC16IS752调试
- Apollo星火计划学习笔记——第一讲 使用Apollo学习自动驾驶
- 2019 最烂密码排行榜大曝光!网友:已中招
- 你知道怎样进行芝麻动态vps速度测试吗?
- Ps如何调出一寸或者二寸等规定尺寸的照片
- 计算机系统的储存单位及换算关系,计算机储存单位和换算关系
热门文章
- C#_XXX事件 的重载均与委托System.EventHandler不匹配
- 【正式发布】火星人敏捷开发手册2012-12-25(基于Scrum的敏捷开发免费培训教材及公司内部宣传材料)...
- HSRP的初步解析及典型应用2
- 办公自动化及工作流技术
- Exposing Windows Forms Controls as ActiveX controls
- Spring Bean的生命周期以及IOC源码解析
- cad怎么向下位移_CAD制图初学入门教程:阵列功能的使用技巧
- php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
- c语言实现链表结构6,用c语言实现的链表结构--数据结构实验
- 小样本点云深度学习库_合成鲁棒的对抗样本来欺骗深度学习分类器