rpc接口怎么写_rpcbind服务端口

rpc接口怎么写_rpcbind服务端口编写更安全的RPC接口前言在一般的RPC应用当中,作为开发人员一般分为了三种,第一种就是提供RPC服务的开发人员,第二种就是客户端使用RPC服务的开发人员,以及最重要的设计RPC接口和规范RPC接口的开发人员,前面的案例当中我们将三种角色融在了一起,虽然看起来非常的方便,但是非常的不利于后期的维护以及二次开发RPC接口规范如果要冲高HelloService服务,第一步需要明确服务的名字以及接口(HelloService服务在上两篇博客)constHelloServiceName=”path/to

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

编写更安全的RPC接口

前言

在一般的RPC应用当中,作为开发人员一般分为了三种,第一种就是提供RPC服务的开发人员,第二种就是客户端使用RPC服务的开发人员,以及最重要的设计RPC接口和规范RPC接口的开发人员,前面的案例当中我们将三种角色融在了一起,虽然看起来非常的方便,但是非常的不利于后期的维护以及二次开发

RPC接口规范

如果要冲高HelloService服务,第一步需要明确服务的名字以及接口(HelloService服务在上两篇博客)

const HelloServiceName="path/to/pkg.helloservice"
type HelloServiceInterFace = interface{ 
   
  Hello(request string,reply *string)error
}
func RegisterHelloService(svc HelloServiceinterface)error{ 
   
  return rpc.RegisterName(HelloServiceName,svc)
}

我们把RPC服务的接口规范分为三个部分:首先是服务的名称,然后时服务要实现的详细方法列表,最后时注册该类服务的函数。为了避免名字的冲突,我们在PRC无法的名字中增加了包路径前缀(这个是RPC服务抽象的包路径,并非完全等价于Go语言的包路径)。RegisterHelloService注册服务的时候,编译器会要求唇乳的对象满足HelloServiceInterface接口。

在定义了ROC服务接口的规范以后,客户端就可以更具规范编写RPC调用的接口了

func main(){ 
   
  client , err:=rpc.Dial("tcp","localhost:1234")
  if err !=nil{ 
   
    log.Fatal("dialing:",err)
  }
  var reply string
  err = client.Call(HelloServiceName+".Hello","hello",&reply)
  if err !=nil{ 
   
    log.Fatal(err)
  }
}

其中唯一的变化是client.Call()的第一个参数用HelloServiceName+”.Hello”代替了“HelloService.Hello”然而通过client.Call()函数调用RPC方法依然比较烦碎,同时参数的类型依然无法得到编译器提供的安全保障

为了简化客户端用户调用RPC函数,我们可以在接口规范部分增加对库护短的简单包装:

type HelloServiceClient struct{ 
   
  *rpc.Client
}
var _ HelloServiceInterface = (*HelloServiceClient)(nil)
func DialHelloService(network,address string)(*HelloServiceClient,error){ 
   
  c,err :=rpc.Dial(network,address)
  if err !=nil{ 
   
    return nil,err
  }
  return &HelloServiceClient{ 
   Client:c},nil
}

func (p *HelloServiceClient) Hello(request string,reply *string)error{ 
   
  return p.Client.Call(HelloServiceName+".Hello",request,reply)
}

我们在接口规范中针对客户新增加了HelloServiceClient类型,该类型也必须满足HelloServiceInterface接口,这样客户端用户就可以直接通过接口的方法调用RPC函数。

func main(){ 
   
  client,err :=DialHelloService("tcp,"lacalhost:1234") if err!=nil{ log.Fatal("dialing:",err) } var reply string err = client.Hello("hello",&repluy)
if err!=nil{ 
   
     log.Fatal(err)
	}
}

现在客户端用户不用再担心RPC方法名称或参数类型不匹配等低级错误的发生

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182552.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java面向对象三大特征的理解

    Java面向对象三大特征的理解面向对象三大特征的理解初始理解封装继承多态初始理解其实这些知识很早就有接触,而且一些概念也牢记于心了。自己叙述面向对象的特征会是这样的:面向对象的三大特征是封装、继承和多态。封装是对代码的封装以实现迪内聚高耦合的设计,使代码更安全且具有良好的扩展性。继承是父类产生子类的过程,子类可以使用父类的非私有的属性和方法。多态是一个对象在不同时刻可以表现出不同状态的现象。外加Animal和Cat的例子。这一段时间敲了不少的Java代码,在敲代码的过程中想了无数次的面向对象这几个概念,对他们有了更深的了解,在这

  • 数据库事务4种隔离级别及7种传播行为「建议收藏」

    数据库事务4种隔离级别及7种传播行为「建议收藏」数据库事务4种隔离级别及7种传播行为

  • navicat 15激活码 linux【2021.10最新】

    (navicat 15激活码 linux)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1STL5S9V8F-eyJsaWN…

  • 怎么安装pycharm及环境变量配置_JRE环境配置

    怎么安装pycharm及环境变量配置_JRE环境配置pycharm安装以及其环境的配置说明此次我们使用win10系统安装pycharm的64位社区版,并且对Anaconda3中自带的Python3进行环境的配置,如果您没有Anaconda3甚至是没有Python3环境,可以参考Anaconda3安装教程及说明,如果您的pip源未更改,这里推荐您改为使用国内的pip源,这样可以更快的下载组件,方法见修改pip源至国内镜像网站。教程从开始菜单中找到你的AnacondaPrompt并打开…

  • 【Linux】fatal: unable to access ‘https://github xxxxxxxxx的解决方法

    【Linux】fatal: unable to access ‘https://github xxxxxxxxx的解决方法fatal:unabletoaccess‘https://githubxxxxxxxxx的解决方法报错:输入gitclonehttps://github.com/Avnet/bdf.git后报错如下:解决办法:将命令中的https改为git。即:将命令改为gitclonegit://github.com/Avnet/bdf.git,成功:…

  • pycharm激活码【2021免费激活】[通俗易懂]

    (pycharm激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号