0e8ace57af4593280695bfe4b5602eb6
go微服务之rpc:hprose客户端和单元测试

Hprose 2.0 for Golang 支持多种底层网络协议绑定的客户端,比如:HTTP 客户端,Socket 客户端和 WebSocket 客户端。其中 HTTP 客户端支持跟 HTTP、HTTPS 绑定的 hprose 服务器通讯。Socket 客户端支持跟 TCP、UNIX Socket 绑定的 hprose 服务器通讯,并且支持全双工和半双工两种模式。WebSocket 客户端支持跟 ws、wss 绑定的 hprose 服务器通讯。
尽管支持这么多不同的底层网络协议,但除了在对涉及到底层网络协议的参数设置上有所不同以外,其它的用法都完全相同。因此,我们在下面介绍 hprose 客户端的功能时,若未涉及到底层网络协议的区别,就以 HTTP 客户端为例来进行说明。
上节课我们讲解了使用hprose进行rpc通信的服务端,我们构建了一个sayhello方法,那客户端如何调用sayhello方法呢?

启动server,监听8086端口

见上篇文章 go微服务之rpc:hprose服务端

使用工厂构造器函数创建客户端

func NewClient(uri ...string) Client

该方法也是接受 1 个或多个服务器地址,且地址开始的 scheme 部分必须相同。
该方法接受 http, https, tcp, tcp4, tcp6, unix, ws, wss 开头的地址。该方法会根据所指定的 scheme 来自动识别该创建哪种具体的客户端对象。
如果指定的是 http、https 的地址,默认情况下是返回 net/http 的客户端

编写client端,请求方法

```
package main
import (
"github.com/hprose/hprose-golang/rpc"
"helloworld/pkg/helloworld"
"helloworld/internal"
)
// 客户端示例
func main() {
client := rpc.NewClient("http://127.0.0.1:8086/")
// 初始化客户端
var service helloworld.GreeterClientService
client.UseService(&service)
// 调用远程方法
res, err := service.SayHello(&helloworld.HelloRequest{Message:"hello"})

if err != nil{
    err, _ := internal.FromError(err)
    println(err.Code, err.Message)
}else{
    println(res.Message)
}
top Created with Sketch.