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  }