thrift 服务代理搭建
tcp代理对多种协议测试
- 代理测试thrift推荐
- 代理测试redis 推荐
- 代理测试websocket 不推荐
- 代理测试http/https不推荐
其实不建议使用 tcp 进行代理,因为太简单了
tcp代理特点
- 流式数据及无状态数据(没有 header/ cookie)推荐使用
- 对服务管控制比较少,只能做
流量控制
及请求来源限制
- 如果有对应协议代理推荐使用对应协议代理 ‘http/websocket’
tcp代理测试thrift
- thrift安装参考: thrift.apache.org/docs/install/
- thrift介绍
- Facebook的一个开源项目,后来进入Apache进行孵化
- Thrift也是支持跨语言的,所以它有自己的一套IDL
- Thrift的网络协议建立在TCP协议基础上
- 目前主要功能是支持rpc方法调用
- 构建thrift测试server与client
- 代理测试
构建thrift测试server与client
- 首先编写
thrift_ gen.thnift
thrift 配置文件 - 运行IDL生成命令,生成对应语言 server/client 结构体
’thrift --gen go thrift_gen.thrift` - 使用生成的IDL单独构建 server 与 client 即可
首先编写 thrift_ gen.thnift
thrift 配置文件
pratise/proxy/thrift_server_client/thrift_ gen.thnift
namespace go thrift_gen
struct Data {
1: string text
}
service format_data {
Data do_format(1:Data data),
}
进入目录 pratise/proxy/thrift_server_client
执行 模板代码生成命令 thrift --gen go thrift_gen.thrift
/d/Dev/env/thrift014/thrift014.exe --gen go thrift_gen.thnift
然后就会生成目录: pratise/proxy/thrift_server_client/gen-go
注意
thrift 命令版本,与golang 项目安装版本需要保持一致。
否则生成代码可能报错
查看版本方法
$ /d/Dev/env/thrift014/thrift011.exe --version
Thrift version 0.14.2
使用生成的 IDL单独构建 server 与 client
客户端代码:pratise/proxy/thrift_server_client/thriftclient_main/main.go
服务端代码:pratise/proxy/thrift_server_client/thriftserver_main/main.go
测试 server 与 client
启动 服务端代码:pratise/proxy/thrift_server_client/thriftserver_main/main.go
启动 客户端代码:pratise/proxy/thrift_server_client/thriftclient_main/main.go
出现安装 thrift 0.11.0 版本失败问题
处理方法:自己把 thrift 0.11.0 版本代码下载下来。自己发布一个 go module
测试
# 启动服务器
go run thriftserver_v1/main.go
# 启动 客户端
go run thriftclient_v1/main.go
拷贝:D:\Dev\env\golang\bin\pkg\mod\git.apache.org\thrift.git@v0.14.2\tutorial\go\src
main true 运行 服务端
接下来,打开另一个terminal,把main函数里的server那里按上一节说的改成false,再运行,就是客户端了。
Administrator@DESKTOP-U15QB8I MINGW64 /d/Dev/workplace/golang/gateway_v1/pratise/proxy/thrift_server_client/thrift_v1 (master)
$ go run main.go server.go client.go handler.go
handler.go:25:2: package shared is not in GOROOT (D:\Dev\env\golang\src\shared)
server.go:26:2: package tutorial is not in GOROOT (D:\Dev\env\golang\src\tutorial)