项目作者: plimble

项目描述 :
jsonrpc on echo
高级语言: Go
项目地址: git://github.com/plimble/jsonrpc.git
创建时间: 2017-04-23T20:09:54Z
项目社区:https://github.com/plimble/jsonrpc

开源协议:MIT License

下载


jsonrpc

JSONRPC on echo

Install

Install Server

  1. go get -u github.com/plimble/jsonrpc

Install client

  1. go get -u github.com/plimble/jsonrpc/client

Install Both

  1. go get -u github.com/plimble/jsonrpc/...

Example Server

  1. package main
  2. import (
  3. "context"
  4. "github.com/labstack/echo"
  5. "github.com/plimble/jsonrpc"
  6. )
  7. type Adder struct{}
  8. type AddReq struct {
  9. A, B int
  10. }
  11. type AddRes struct {
  12. Val int
  13. }
  14. func (a *Adder) Add(ctx context.Context, req *AddReq) (*AddRes, error) {
  15. val := req.A + req.B
  16. return &AddRes{
  17. Val: val,
  18. }, nil
  19. }
  20. func (a *Adder) Multiply(ctx context.Context, req *AddReq) (*AddRes, error) {
  21. val := req.A * req.B
  22. return &AddRes{
  23. Val: val,
  24. }, nil
  25. }
  26. func main() {
  27. j := jsonrpc.New()
  28. j.Register(new(Adder), "adder")
  29. e := echo.New()
  30. e.POST("/", j.Handle)
  31. e.POST("/batch", j.HandleBatch)
  32. e.Start(":3000")
  33. }

Example Client

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/plimble/jsonrpc/client"
  5. )
  6. func main() {
  7. c := client.New("http://localhost:3000", "/", "/batch")
  8. res, err := c.Request("adder.Add", client.Params{"a": 1, "b": 4})
  9. if err != nil {
  10. panic(err)
  11. }
  12. if res.Error != nil {
  13. panic(res.Error)
  14. }
  15. result := make(map[string]interface{})
  16. res.UnmarshalResult(&result)
  17. fmt.Println("Result:", result)
  18. ress, err := c.Requests(&client.Requests{
  19. client.NewRequest("adder.Add", client.Params{"a": 1, "b": 2}),
  20. client.NewRequest("adder.Add", client.Params{"a": 2, "b": 2}),
  21. client.NewRequest("adder.Add", client.Params{"a": 3, "b": 2}),
  22. client.NewRequest("adder.Multiply", client.Params{"a": 4, "b": 2}),
  23. })
  24. if err != nil {
  25. panic(err)
  26. }
  27. for _, res := range ress {
  28. result := make(map[string]interface{})
  29. res.UnmarshalResult(&result)
  30. fmt.Println("Batch Result:", result)
  31. }
  32. }