|
@@ -2,9 +2,11 @@ package server
|
|
|
|
|
|
import (
|
|
import (
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "github.com/rotisserie/eris"
|
|
"log"
|
|
"log"
|
|
"strconv"
|
|
"strconv"
|
|
"sync"
|
|
"sync"
|
|
|
|
+ "sync/atomic"
|
|
"testing"
|
|
"testing"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
@@ -19,36 +21,64 @@ func BenchmarkTest1(b *testing.B) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-var conns []*websocket.Conn
|
|
|
|
-
|
|
|
|
func TestServer_WebsocketKeep(t *testing.T) {
|
|
func TestServer_WebsocketKeep(t *testing.T) {
|
|
wg := sync.WaitGroup{}
|
|
wg := sync.WaitGroup{}
|
|
- for j := 10; j < 100; j++ {
|
|
|
|
|
|
+
|
|
|
|
+ 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() {
|
|
go func() {
|
|
|
|
+ wg.Add(1)
|
|
defer wg.Done()
|
|
defer wg.Done()
|
|
- for i := 0; i < 100; i++ {
|
|
|
|
- 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 {
|
|
|
|
- continue
|
|
|
|
|
|
+
|
|
|
|
+ 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
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ }()
|
|
|
|
|
|
- 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))
|
|
|
|
|
|
+ atomic.StoreInt32(&count, count+1)
|
|
|
|
+ for {
|
|
|
|
+ _, _, err = conn.ReadMessage()
|
|
if err != nil {
|
|
if err != nil {
|
|
- continue
|
|
|
|
|
|
+ log.Println(eris.Wrap(err, "unable to read message"))
|
|
|
|
+ return
|
|
}
|
|
}
|
|
-
|
|
|
|
- conns = append(conns, conn)
|
|
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
- wg.Add(1)
|
|
|
|
}
|
|
}
|
|
wg.Wait()
|
|
wg.Wait()
|
|
- fmt.Println(len(conns))
|
|
|
|
}
|
|
}
|
|
|
|
|
|
func BenchmarkServer_WebsocketPressure(b *testing.B) {
|
|
func BenchmarkServer_WebsocketPressure(b *testing.B) {
|