httpclient.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "sync"
  8. gateway "github.com/rpcxio/rpcx-gateway"
  9. "github.com/smallnest/rpcx/codec"
  10. )
  11. type Args struct {
  12. A int
  13. B int
  14. }
  15. type Reply struct {
  16. C int
  17. }
  18. func main() {
  19. cc := &codec.MsgpackCodec{}
  20. args := &Args{
  21. A: 10,
  22. B: 20,
  23. }
  24. data, _ := cc.Encode(args)
  25. var wg sync.WaitGroup
  26. wg.Add(2)
  27. for i := 0; i < 2; i++ {
  28. i := i
  29. go func() {
  30. defer wg.Done()
  31. for j := 0; j < 10; j++ {
  32. req, err := http.NewRequest("POST", "http://127.0.0.1:9981/", bytes.NewReader(data))
  33. if err != nil {
  34. log.Fatal("failed to create request: ", err)
  35. return
  36. }
  37. h := req.Header
  38. // h.Set(gateway.XMessageID, strconv.Itoa(rand.Int()))
  39. // h.Set(gateway.XMessageType, "0")
  40. h.Set(gateway.XSerializeType, "3")
  41. h.Set(gateway.XServicePath, "Arith")
  42. h.Set(gateway.XServiceMethod, "Mul")
  43. res, err := http.DefaultClient.Do(req)
  44. if err != nil {
  45. log.Fatal("#%d failed to call: ", i, err)
  46. }
  47. defer res.Body.Close()
  48. // handle http response
  49. replyData, err := ioutil.ReadAll(res.Body)
  50. if err != nil {
  51. log.Fatal("#%d failed to read response: ", i, err)
  52. }
  53. reply := &Reply{}
  54. err = cc.Decode(replyData, reply)
  55. if err != nil {
  56. log.Fatal("#%d failed to decode reply: ", i, err)
  57. }
  58. log.Printf("#%d: %d * %d = %d", i, args.A, args.B, reply.C)
  59. }
  60. }()
  61. }
  62. wg.Wait()
  63. }