123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package server
- import (
- "fmt"
- "github.com/rotisserie/eris"
- "log"
- "strconv"
- "sync"
- "sync/atomic"
- "testing"
- "time"
- "github.com/google/uuid"
- "github.com/gorilla/websocket"
- )
- func BenchmarkTest1(b *testing.B) {
- fmt.Println(b.N)
- for i := 0; i < b.N; i++ {
- _ = fmt.Sprintf("%d", i)
- }
- }
- func TestServer_WebsocketKeep(t *testing.T) {
- wg := sync.WaitGroup{}
- var count int32
- var failed int32
- go func() {
- wg.Add(1)
- defer wg.Done()
- for {
- time.Sleep(3 * time.Second)
- fmt.Printf("%d, %d \n", atomic.LoadInt32(&count), atomic.LoadInt32(&failed))
- }
- }()
- for i := 0; i < 3000; i++ {
- go func() {
- wg.Add(1)
- defer wg.Done()
- conn, _, err := websocket.DefaultDialer.Dial(
- fmt.Sprintf(`ws://127.0.0.1:10082/websocket/endpoint?X-Websocket-Header-ID=%s`, uuid.NewString()),
- //fmt.Sprintf(`ws://106.75.230.4:10082/websocket/endpoint?X-Websocket-Header-ID=%s`, uuid.NewString()),
- nil)
- if err != nil {
- atomic.StoreInt32(&failed, failed+1)
- log.Println(eris.Wrap(err, "unable to create connect"))
- return
- }
- conn.SetCloseHandler(func(code int, text string) error {
- log.Println(code, text)
- return nil
- })
- go func() {
- for {
- time.Sleep(3 * time.Second)
- message := Message{Type: MessageTypePingPong, RequestId: strconv.Itoa(int(time.Now().UnixMilli())), Content: "ping"}
- err = conn.WriteMessage(websocket.TextMessage, serializationMessage(&message))
- if err != nil {
- log.Println(eris.Wrap(err, "unable to write message"))
- return
- }
- }
- }()
- atomic.StoreInt32(&count, count+1)
- for {
- _, _, err = conn.ReadMessage()
- if err != nil {
- log.Println(eris.Wrap(err, "unable to read message"))
- return
- }
- }
- }()
- }
- wg.Wait()
- }
- func BenchmarkServer_WebsocketPressure(b *testing.B) {
- b.ReportAllocs()
- b.ResetTimer()
- b.SetParallelism(17)
- b.RunParallel(func(p *testing.PB) {
- for p.Next() {
- websocketConnect()
- }
- })
- }
- func websocketConnect() {
- conn, _, err := websocket.DefaultDialer.Dial(
- // fmt.Sprintf(`ws://127.0.0.1:10082/websocket/endpoint?X-Websocket-Header-ID=%s`, uuid.NewString()),
- fmt.Sprintf(`ws://106.75.230.4:10082/websocket/endpoint?X-Websocket-Header-ID=%s`, uuid.NewString()),
- nil)
- if err != nil {
- log.Println(err)
- }
- message := Message{Type: MessageTypePingPong, RequestId: strconv.Itoa(int(time.Now().UnixMilli())), Content: "ping"}
- conn.SetWriteDeadline(time.Now().Add(time.Second * 60))
- err = conn.WriteMessage(websocket.TextMessage, serializationMessage(&message))
- if err != nil {
- log.Println(err)
- }
- go func() {
- for {
- //conn.SetReadDeadline(time.Now().Add(time.Second * 2))
- _, _, err = conn.ReadMessage()
- if err != nil {
- log.Println(err)
- return
- }
- //conn.SetReadDeadline(time.Now().Add(time.Second * 2))
- //log.Println(string(msg))
- }
- }()
- }
|