`
vsong
  • 浏览: 9133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

使用Go进行RPC编程

 
阅读更多

官方提供的 net/rpc 包中提供了远程服务调用(RPC)功能。通过这个包,我们可以发布出服务,供远程调用;同时,客户端通过这个包访问服务端的方法。

 

和其他服务端应用程序一样,我们需要开启一个监听程序,来接收客户端发起的网络请求。

//启动服务器
func Start(protocal string, port string){

	rpc.HandleHTTP()

	l, e:= net.Listen(protocal, port)

	if e != nil{
		log.Panic("listen error: ", e)
	}

	http.Serve(l, nil)
}

 

服务端可以注册对象,暴露出该对象提供的方法,供客户端使用

//注册服务
func Register(v interface{}){

	rpc.Register(v)
}

 我们可以定义自己的服务端对象,通过上述方式发布服务。

	//注册服务
	server.Register(new(MyService))

	//启动服务器
	go server.Start("tcp", ":8086")

 这样,通过新建一个goroutine,发布好了自己定义的服务MyService。客户端则可以指定服务端的地址进行访问。

 

//根据地址调用服务,传入参数,获得结果
func CallTarget(address string, service string, args interface{}, reply interface{}) error{

	client , err := rpc.DialHTTP("tcp", address)

	if err != nil{
		log.Fatal("dialing ", err)
	}

	err = client.Call(service, args, reply)

	return err
}

 

通过进一步的代码封装,可以隐藏调用细节。

 

const(
	Address = "127.0.0.1:8086"
)

func (myService *MyService) SayHello(name string) string{
	var result string
	err := client.Call(Address, &name, &result)
	if err != nil{
		panic(err)
	}
	return result
}

 这样客户端就可以简便的使用rpc服务调用了

 

func main(){

	var myService MyService

	log.Println(myService.SayHello("liusongwei"))
}

 

分享到:
评论

相关推荐

    books-《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf-advanced-go

    books_《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf_advanced-go-programming-book.zip books_《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf_advanced-go-...

    go语言 gorpc

    **Thrift**是Facebook开发的另一个著名的跨语言RPC框架,支持广泛的编程语言。它提供了编译器和库来构建跨语言服务,具有很强的灵活性。 **RPCX**是一个高性能、全功能的分布式RPC框架,专为Go语言设计。RPCX的特点...

    go-jsonrpc-websocket.rar

    在本文中,我们将深入探讨如何使用Go语言和jsonrpc库来构建一个基于Websocket的客户端,以便与服务端进行交互并处理接收到的通知消息。首先,让我们了解这些关键概念: 1. **Go语言(Golang)**:由Google开发的...

    Go-jr:一个采用Go开发的JSON-RPC命令行客户端

    **Go-jr: Go语言实现的JSON-RPC命令行客户端** Go-jr是一个用Go语言编写的JSON-RPC命令行工具,它为开发者提供了一种简单、高效...通过深入理解JSON-RPC协议和Go语言的网络编程,可以更有效地利用Go-jr进行开发工作。

    go rpc 开发指南.pdf112

    总的来说,Go RPC开发指南不仅介绍了Go语言如何使用官方库进行RPC服务开发,还涵盖了流行框架如gRPC,以及其他一些高级框架和工具。通过阅读这份指南,开发者可以快速掌握Go生态下的RPC开发技术,并将其应用到实际的...

    go语言web编程

    2.Go语言基础 2.1. 你好,Go 2.2. Go基础 2.3. 流程和函数 2.4. struct 2.5. 面向对象 2.6. interface 2.7. 并发 2.8. 小结 3.Web基础 3.1 web工作方式 3.2 Go搭建一个简单的web服务 3.3 Go如何使得web工作 3.4 Go的...

    Go RPC开发指南.pdf

    "Go RPC开发指南.pdf" ...Go RPC开发指南.pdf是Go语言中的一种RPC开发指南,涵盖了RPC的基本概念、RPC库的选择、RPC服务的实现、客户端调用、序列化、Fail Mode、路由选择、统计与限流等多个方面。

    Go语言网络编程-v0.0.1.pdf

    本文档主要介绍了Go语言中的网络编程基础知识,涵盖了Socket编程、HTTP客户端与服务器的实现方式,以及如何通过Go语言进行RPC(远程过程调用)和JSON数据交换等实用技巧。此外,还涉及了Web开发相关的实践内容。 ##...

    Golang语言网络编程简要介绍,包含简单的示例

    ### Golang语言网络编程知识点详解 ...以上示例展示了如何使用Go语言进行网络编程的基本操作,包括Socket编程、HTTP编程以及RPC编程的核心概念和技术细节。这些基础知识对于开发高质量的网络应用程序至关重要。

    Go Web编程 完整版 PDF

    - **Socket编程**:介绍如何使用Go语言进行网络编程,特别是TCP/IP协议的Socket编程。 - **WebSocket**:讲解WebSocket协议及其在Go语言中的实现方法,用于实现实时双向通信。 - **REST**:探讨RESTful架构的设计...

    golang与java间的json-rpc跨语言调用需要的jar

    本话题聚焦于Golang(Go语言)与Java之间的JSON-RPC(JSON Remote Procedure Call)通信,这是一种轻量级的远程调用协议,通过JSON(JavaScript Object Notation)作为数据交换格式来实现。在这个场景下,我们主要...

    go语言高级编程 高清带标签

    - **pbgo框架**:pbgo是一个基于Protobuf的Go语言框架,它简化了使用protobuf进行RPC通信的过程。这部分内容介绍了pbgo的基本使用方法及其在实际项目中的应用场景。 - **grpcurl工具**:grpcurl是一个命令行工具,...

    Go-Go语言开发的JSON-RPCServer框架

    在IT行业中,Go语言因其高效的性能、...通过研究"jrs-master"项目,我们可以深入理解Go语言如何构建一个高性能、符合JSON-RPC 2.0标准的服务器框架,这对于任何希望在Go中进行网络编程的开发者来说都是一笔宝贵的财富。

    Go高级编程

    概述了使用Go语言进行Web开发的基本流程和技术栈选择。 **5.2 Router请求路由** 介绍了如何使用路由功能处理不同的HTTP请求。 **5.3 Middleware中间件** 讲解了中间件的概念以及如何在Go Web框架中使用中间件。 ...

    go语言编程 相关测试代码

    Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。这个压缩包中的文件是与Go语言编程相关的测试代码,主要涵盖了网络编程、并发编程和反射等核心概念。下面将...

    go 高级编程

    Go语言高级编程是一本专为有一定Go语言基础的开发者编写的进阶书籍,深入探讨了Go语言的高级特性、原理和应用实践。 在Go语言的基础章节中,主要介绍了Go的诞生、基础语法以及并发内存模型等核心概念。Go语言的并发...

    《Go 语言编程之旅:一起用 Go 做项目》第三章:RPC 程序(gRPC Server).zip

    总结来说,本章《Go 语言编程之旅:一起用 Go 做项目》第三章主要介绍了如何使用Go语言和gRPC框架来构建RPC服务,涉及protobuf定义、服务端和客户端的实现,以及一些基本的gRPC特性。通过学习这一章,读者可以掌握...

    Go-Go语言高级编程(AdvancedGoProgramming)

    《Go语言高级编程》是一本深入探讨Go语言高级特性和应用的开源图书,旨在帮助开发者进一步提升在Go语言上的技能和理解。这本书涵盖了多个关键领域,包括与C语言的交互(CGO)、Go汇编语言的使用、远程过程调用(RPC...

Global site tag (gtag.js) - Google Analytics