跟踪调试
有时候我们在调试过程中,可能会需要查看输入输出数据。用抓包工具抓取数据当然是一个办法,但是使用过滤器可以更方便更直接的显示出输入输出数据。
log_filter.go
- package main
- import (
- "fmt"
- "github.com/hprose/hprose-golang/rpc"
- )
- type LogFilter struct {
- Prompt string
- }
- func (lf LogFilter) InputFilter(data []byte, context rpc.Context) []byte {
- fmt.Printf("%v: %s\r\n", lf.Prompt, data)
- return data
- }
- func (lf LogFilter) OutputFilter(data []byte, context rpc.Context) []byte {
- fmt.Printf("%v: %s\r\n", lf.Prompt, data)
- return data
- }
main.go
- package main
- import "github.com/hprose/hprose-golang/rpc"
- func hello(name string) string {
- return "Hello " + name + "!"
- }
- // HelloService is ...
- type HelloService struct {
- Hello func(string) (string, error)
- }
- func main() {
- server := rpc.NewTCPServer("")
- server.AddFunction("hello", hello).AddFilter(LogFilter{"Server"})
- server.Handle()
- client := rpc.NewClient(server.URI())
- client.AddFilter(LogFilter{"Client"})
- var helloService *HelloService
- client.UseService(&helloService)
- helloService.Hello("World")
- client.Close()
- server.Close()
- }
然后在命令行中运行:
go run main.go log_filter.go
当然你也可以编译之后再执行。
之后,你会看到运行结果:
Client: Cs5"Hello"a1{s5"World"}z
Server: Cs5"Hello"a1{s5"World"}z
Server: Rs12"Hello World!"z
Client: Rs12"Hello World!"z
通过上面的输出,我们就可以清楚的看到 hprose 服务器和客户端之间是如何通讯的了。