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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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也需要进行下改动了
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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)
}
|
1
|
第二个例子中的
|
1
|
newServer.HandleHTTP( "/foo" , "/bar" )
|
1
|
可以任意设置,第一个例子其实是设置了默认的两个
|
1
|
|
1
|
这里也顺便将reply作为[]slice的例子给演示了下
|
1
|
|
golang rpc的两种调用方法相关推荐
- golang python rpc_golang rpc的两种调用方法
golang的rpc有两种方法进行调用,一种是rpc例子中给的:package main import ( "net/rpc" "net/http" " ...
- golang java rpc_golang两种调用rpc的方法
本文实例讲述了golang两种调用rpc的方法.分享给大家供大家参考,具体如下: golang的rpc有两种方法进行调用,一种是rpc例子中给的: package main import ( &quo ...
- 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 ...
- 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)
NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...
- python ioc di_Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法
Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法 第一中方法:在xml文件中注入: (1)开源的轻量级的应用开发框架 特点:a.简化开发:b.解耦:c.集成: 原理对象与对象之 ...
- Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理
Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...
- Java中关于Arrays.sort的两种重载方法的理解
前言 在java中重载排序方法的方法目前有两种,一种是实现Comparable接口的compareTo方法,还有一种是用比较器(comparator) 作为参数,其中比较器是实现了Comparator ...
- 在.NET中执行Async/Await的两种错误方法
微信公众号:架构师高级俱乐部 关注可了解更多的编程,架构知识.问题或建议,请公众号留言; 如果你觉得此文对你有帮助,欢迎转发 在.NET中执行异步/等待的两种错误方法 在应用开发中,我们为了提高应用程 ...
最新文章
- AI一分钟|特斯拉前员工爆料:部分汽车使用电池缺陷;小鹏汽车计划2019年底前融资300亿元...
- Flutter 基础布局Widgets之Baseline、AspectRatio详解
- java栈的应用_Java堆栈应用程序
- 帧起始定界符_帧详解 - web黄金矿工 - 博客园
- 微贷网 Java_关于Java集合的小抄
- android小应用帮美女更衣系列二(附源码)
- Bat 一键清理Chrome谷歌浏览器所有缓存 个人档案
- TM1640 数码管驱动代码(简化版)
- 图解机器学习算法(10) | XGBoost模型最全解析(机器学习通关指南·完结)
- 【跨境电商】WhatsApp营销保姆级教程!
- 曲线数学NURBS之B样条曲线
- java 如何测试_java – 如何测试一个变量是否设置?
- 小何讲进程: 编写Linux守护进程方法详解
- Padstack Editor 17.4 - document
- 准备注册网易企业邮箱,安全功能怎么样?
- mendix费用价格
- Maven 中跳过单元测试方法
- ubuntu 安装 navicat
- 小象学院之python实例
- Android 源码在线阅读
热门文章
- java对象--内部类
- 将 Microsoft Excel 导入至 MySQL
- idea_pyspark 环境配置
- java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()Z
- Javascript中的函数是第一类对象(first-class object)
- GHOST WIN8 64位软件自选安装专业优化版 201307 V1.0
- EBS服务重启脚本(应用和数据库)
- .net framework 4中SpinLock和lock的区别
- 【跃迁之路】【707天】程序员高效学习方法论探索系列(实验阶段464-2019.1.28)...
- zephir开发的扩展“wudimei框架”之数据库使用方法