diff options
Diffstat (limited to '')
-rw-r--r-- | bench/.gitignore | 1 | ||||
-rw-r--r-- | bench/bench.go | 126 | ||||
-rw-r--r-- | bench/go.mod | 5 | ||||
-rw-r--r-- | bench/go.sum | 2 |
4 files changed, 0 insertions, 134 deletions
diff --git a/bench/.gitignore b/bench/.gitignore deleted file mode 100644 index ba99195..0000000 --- a/bench/.gitignore +++ /dev/null @@ -1 +0,0 @@ -bench diff --git a/bench/bench.go b/bench/bench.go deleted file mode 100644 index c7908ee..0000000 --- a/bench/bench.go +++ /dev/null @@ -1,126 +0,0 @@ -package main - -import ( - "context" - "crypto/rand" - "errors" - "flag" - "fmt" - "log" - "math/big" - "net/http" - "sync" - "time" - - "github.com/coder/websocket" -) - -var ( - chosenCourseID = flag.Int("c", -1, "course ID (-1 for random)") - connections = flag.Int("n", 10000, "number of connections") -) - -var ( - errUnexpectedStatusCode = errors.New("unexpected status code") - courses = big.NewInt(13) - globalLock sync.RWMutex -) - -func w(ctx context.Context, c *websocket.Conn, m string, cid int) error { - log.Printf("%d <- %s", cid, m) - err := c.Write(ctx, websocket.MessageText, []byte(m)) - if err != nil { - return fmt.Errorf("error writing to connection: %w", err) - } - return nil -} - -func connect(cid int) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - c, r, err := websocket.Dial(ctx, "wss://localhost.runxiyu.org:8080/ws", nil) - if err != nil { - panic(err) - } - defer func() { - err := c.CloseNow() - if err != nil { - panic(err) - } - }() - - if r.StatusCode != http.StatusSwitchingProtocols { - panic(errUnexpectedStatusCode) - } - - err = w(ctx, c, "HELLO", cid) - if err != nil { - panic(err) - } - - go func() { - defer func() { - if r := recover(); r != nil { - cancel() - log.Printf("%d !R %v", cid, r) - } - }() - for { - _, msg, err := c.Read(ctx) - if err != nil { - panic(err) - } - log.Printf("%d -> %s", cid, string(msg)) - } - }() - - globalLock.RLock() - defer globalLock.RUnlock() - - if *chosenCourseID == -1 { - courseID, err := rand.Int(rand.Reader, courses) - if err != nil { - panic(err) - } - err = w(ctx, c, fmt.Sprintf("Y %d", courseID.Int64()+1), cid) - if err != nil { - panic(err) - } - } else { - err = w(ctx, c, fmt.Sprintf("Y %d", *chosenCourseID), cid) - if err != nil { - panic(err) - } - } - - var deadlock sync.Mutex - deadlock.Lock() - deadlock.Lock() -} - -func main() { - flag.Parse() - - globalLock.Lock() - for i := range *connections { - go func() { - defer func() { - if r := recover(); r != nil { - log.Printf("%d !M %v", i, r) - } - }() - connect(i) - }() - time.Sleep(2 * time.Millisecond) - } - for i := range 6 { - time.Sleep(1 * time.Second) - log.Printf("waiting %d before trigger", 5-i) - } - globalLock.Unlock() - - var deadlock sync.Mutex - deadlock.Lock() - deadlock.Lock() -} diff --git a/bench/go.mod b/bench/go.mod deleted file mode 100644 index 1ee2a19..0000000 --- a/bench/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module git.sr.ht/~runxiyu/cca/bench - -go 1.23.1 - -require github.com/coder/websocket v1.8.12 diff --git a/bench/go.sum b/bench/go.sum deleted file mode 100644 index 029cf47..0000000 --- a/bench/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= -github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= |