# Thrift高级2
由于之前是使用C++做的,有很多不便,这里尝试使用golang制作thrift over http服务和客户端。
服务器
有句话说的好,远在天边,尽在眼前。
想要制作这个主题时,google了半天也没有一个靠谱的。实在没办法了,翻了翻test项目,哈哈,就有了现在的服务端。
package main
import (
"fmt"
"net/http"
"testgo/mathservice"
"git.apache.org/thrift.git/lib/go/thrift"
)
const (
NetWorkAddr = "127.0.0.1:9090"
)
type MyMathService struct {
}
func (this *MyMathService) Add(A int32,B int32) (r int32,err error) {
r = A + B
err = nil
fmt.Println("Add",A,B)
return
}
func main() {
handler := &MyMathService{}
processor := mathservice.NewMathServiceProcessor(handler)
protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
http.HandleFunc("/",thrift.NewThriftHandlerFunc(processor,protocolFactory,protocolFactory))
fmt.Println("thrift server in http://",NetWorkAddr)
http.ListenAndServe(fmt.Sprintf(":%d", 9090),nil)
}
这里借用了net/http
库的handleFunc功能,实际上,使用gin/beego/...
等Web框架也是可以这样的。完美!!
客户端
package main
import (
"fmt"
"os"
"testgo/mathservice"
"git.apache.org/thrift.git/lib/go/thrift"
)
func main() {
client_transport,_ := thrift.NewTHttpClient("http://127.0.0.1:9090")
protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
client := mathservice.NewMathServiceClientFactory(client_transport,protocolFactory)
if err := client_transport.Open(); err != nil {
fmt.Fprintln(os.Stderr,"Error opening socket",err)
os.Exit(1)
}
defer client_transport.Close()
for i := int32(0); i < 100; i++ {
nRet,_ := client.Add(i,i)
fmt.Println(i,"Add",nRet)
}
fmt.Println("Over!")
}
使用了官方自带的thrift.NewTHttpClient
,经测试与Cpp服务端通信没有问题。
结论
世界很美丽,生活很美好。
计划
后续会将常见功能集成到服务中来,大概包含一下几点内容:
- 音频播放
- 串口收发
- MQTT支持
- Thrift RPC端口复用版本
- Web站点支持
- 文件服务
- Pyhton嵌入
- 系统音量控制
- 多个服务集成
- Etcd等服务发现
- 内网穿透
客户端:
- H5控制
- Electron展示
- Rust展示
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。