手记

thrift 构建 golang 请求

如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。[更多系列文章在我博客] coderdao.github.io

thrift 构建 golang 请求

简介

其实今天本来是想写 更硬核的 thrift 构建 tcp 代理,结果 thrift 0.11.0 版本暂无办法安装。导致一大堆代码报错。只能退而求其次,说说 thrift 构建 golang 请求

环境

window 10

安装 thrift

[thrift 官网]上 window 有直接的 exe 文件;而 linux/mac 则需要编译安装

而如果需版本有要求的话,thrift 也提供历史版本,但你必须确认 安装 thrift 版本号 与 程序使用 thrift SDK 版本号 保持一致。否则之后 thrift IDL生成命令 生成代码 会因为报错而无法运行

安装成功后,运行命令检查是否安装成功:

$ /d/Dev/env/thrift014/thrift014.exe -version
Thrift version 0.14.2

下载 thrift 源码

git clone git@github.com:apache/thrift.git

# 如果 github 网速慢也可以使用国内镜像
git clone git@gitee.com:apache/thrift.git

打开文件夹我们可以找到各种语言版本代码,这里主要说的是 golang,所以我们选择go文件夹

不过可惜的是,我目前还没找到 go module 离线安装的方法。所以依旧使用在线安装方式 go get git.apache.org/thrift.git 安装 thrift

环境搭建

在 目录 thrift/tutorial 我们可以找到 模型例子,具体操作如下

1、在 $GOROOT/src 目录下,新建文件夹 thrift_server_client 并且 启用 go mod

$  mkdir $GOROOT/src/thrift_server_client
$  cd $GOROOT/src/thrift_server_client
$  go mod init thrift_server_client

2.、 安装 thrift SDK

$  go get git.apache.org/thrift.git

3、 复制 thrift 源码 目录 thrift/tutorial 下 文件 shared.thrifttutorial.thrift$GOROOT/src/thrift_server_client 文件下

4、运行IDL生成命令,生成对应语言 server/client 结构体 'thrift --gen [语言] [代码配置文件]`

$  /d/Dev/env/thrift014/thrift014.exe --gen go shared.thrift
$  /d/Dev/env/thrift014/thrift014.exe --gen go tutorial.thrift

便可以得到下面的代码

5、如果你这时有阅读生成的代码,就会发现 tutorial.gotutorial-consts.go 存在的 shared 引用是找不到的(idle 无法阅读源码)

其实,shared它指向的就是我们刚才 /d/Dev/env/thrift014/thrift014.exe --gen go shared.thrift 生成的代码。所以把 shared 引用替换为相对路径 thrift_server_client/gen-go/shared 即可

构建 服务端、客户端

我们再把 thrift/tutorial/go/src 拷贝至 $GOROOT/src/thrift_server_client 文件下

只要看 main.go 文件

	// 是否服务端开启
	server := flag.Bool("server", false, "Run server")
	// 指定请求协议
	protocol := flag.String("P", "binary", "Specify the protocol (binary, compact, json, simplejson)")
	// 绑定监听地址
	addr := flag.String("addr", "localhost:9090", "Address to listen to")
	// 是否开启https
	secure := flag.Bool("secure", false, "Use tls secure transport")
  • 首先 server := flag.Bool(“server”,true, “Run server”) 打开服务端,运行
$ go run main.go server.go client.go handler.go
*thrift.TServerSocket
Starting the simple server... on  localhost:9090
  • 然后 启动客户端 server := flag.Bool(“server”,false, “Run server”) ,运行
$ go run main.go server.go client.go handler.go
ping()
1+1=2
Invalid operation: InvalidOperation({WhatOp:4 Why:Cannot divide by 0})
15-10=5
Check log: 5

这是服务端也会接受到客户端同学,打印内容:

Starting the simple server... on  localhost:9090
ping()
add(1,1)
calculate(1, {DIVIDE,1,0})
calculate(1, {SUBTRACT,15,10})
getStruct(1)

至此,如何使用 thrift 示例请求到此结束,之后如长链接、wss 也能够基于该示例改造而来

1人推荐
随时随地看视频
慕课网APP