github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/benchmarks_test.gon-place (about) 1 package sockjs 2 3 import ( 4 "bufio" 5 "fmt" 6 "log" 7 "net/http" 8 "net/http/httptest" 9 "net/url" 10 "strings" 11 "sync" 12 "testing" 13 ) 14 15 func BenchmarkSimple(b *testing.B) { 16 var messages = make(chan string, 10) 17 h := NewHandler("/echo", DefaultOptions, func(session Session) { 18 for m := range messages { 19 session.Send(m) 20 } 21 session.Close(1024, "Close") 22 }) 23 server := httptest.NewServer(h) 24 defer server.Close() 25 26 req, _ := http.NewRequest("POST", server.URL+fmt.Sprintf("/echo/server/%d/xhr_streaming", 1000), nil) 27 resp, err := http.DefaultClient.Do(req) 28 if err != nil { 29 log.Fatal(err) 30 } 31 for n := 0; n < b.N; n++ { 32 messages <- "some message" 33 } 34 fmt.Println(b.N) 35 close(messages) 36 resp.Body.Close() 37 } 38 39 func BenchmarkMessages(b *testing.B) { 40 msg := strings.Repeat("m", 10) 41 h := NewHandler("/echo", DefaultOptions, func(session Session) { 42 for n := 0; n < b.N; n++ { 43 session.Send(msg) 44 } 45 session.Close(1024, "Close") 46 }) 47 server := httptest.NewServer(h) 48 49 var wg sync.WaitGroup 50 51 for i := 0; i < 100; i++ { 52 wg.Add(1) 53 go func(session int) { 54 reqc := 0 55 // req, _ := http.NewRequest("POST", server.URL+fmt.Sprintf("/echo/server/%d/xhr_streaming", session), nil) 56 req, _ := http.NewRequest("GET", server.URL+fmt.Sprintf("/echo/server/%d/eventsource", session), nil) 57 for { 58 reqc++ 59 resp, err := http.DefaultClient.Do(req) 60 if err != nil { 61 log.Fatal(err) 62 } 63 reader := bufio.NewReader(resp.Body) 64 for { 65 line, err := reader.ReadString('\n') 66 if err != nil { 67 goto AGAIN 68 } 69 if strings.HasPrefix(line, "data: c[1024") { 70 resp.Body.Close() 71 goto DONE 72 } 73 } 74 AGAIN: 75 resp.Body.Close() 76 } 77 DONE: 78 wg.Done() 79 }(i) 80 } 81 wg.Wait() 82 server.Close() 83 } 84 85 func BenchmarkHandler_ParseSessionID(b *testing.B) { 86 h := handler{prefix: "/prefix"} 87 url, _ := url.Parse("http://server:80/prefix/server/session/whatever") 88 89 b.ReportAllocs() 90 b.ResetTimer() 91 for i := 0; i < b.N; i++ { 92 h.parseSessionID(url) 93 } 94 }