v2pro / plz.service

concrete implementation choices for plz service
Apache License 2.0
7 stars 0 forks source link

请问支持从idl原始文件(*.thrift)动态编译反射出struct么? #1

Open xinglinyin opened 6 years ago

xinglinyin commented 6 years ago

@taowen 您好!我是来自百度的braver, 想请教大神, 我看这个库server和client 实现,都是基于程序里定义的idl struct. 我现在有一份idl接口文件(.thrift), 我想基于接口thrift, 不静态的用thrift --gen 生成静态编译代码, 实现一个thrift rpc server, 您能方便指导我怎么实现么? 就是在启动server时, 去加载.thrift接口idl文件, 生成对应的service 万分感谢。

xinglinyin commented 6 years ago

@taowen
我尝试基于该项目,实现一个通用的thrift server proxy, 不依赖具体的thrift idl接口文件, 调试发现如下问题, 能否抽空看看? 我在知乎您的项目主页上反馈过 下游 plz.service 返回给client的编码后的数据, 上游拿到了,但是client一收到response, 就回去调用TbufferdTransport.read_struct去反解下游返回的接口response, 我调试时 ,请求线上服务和请求plz.service如下情况:

image

万分感谢!

taowen commented 6 years ago

那你server端咋写的

victordudu1121 commented 6 years ago

@taowen
大神, 抱歉回复你晚了! 这段时间切到其他项目了,这周继续弄这个 我server端代码如下, 其实就是在你实现的server.go 里 加了几行server实现 感谢@taowen 百忙之中,帮看看,可能哪里出问题了,我这边可以随时调试! func main() { /* transport, err := thrift.NewTServerSocket(":9898") if err != nil { panic(err) }

handler := &EchoServer{}
processor := echo.NewEchoProcessor(handler)

transportFactory := thrift.NewTBufferedTransportFactory(8192)
protocolFactory := thrift.NewTCompactProtocolFactory()
server := thrift.NewTSimpleServer4(
    processor,
    transport,
    transportFactory,
    protocolFactory,
)

if err := server.Serve(); err != nil {
    panic(err)
}
*/
type TestRequest struct {
            Field1 string `thrift:",1"`
    }
    type TestResponse struct {
            Field2 string `thrift:",1"`
    }

server := NewServer(thrifter.Config{Protocol: thrifter.ProtocolBinary}.Froze()) server.Handle("sayHello", func(ctx countlog.Context, req TestRequest) (*TestResponse, error) { return &TestResponse{ Field2: "hello", }, nil }) server.Start("127.0.0.1:9998")

}