From 8ef8de0943a820719e77fa2193a909f7d300b45c Mon Sep 17 00:00:00 2001 From: andrzej Date: Sun, 24 Nov 2024 15:23:08 +0100 Subject: [PATCH] allow multiple websocket connections --- go.mod | 5 +++++ go.sum | 2 ++ main.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..2788a16 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module go-buzz + +go 1.23.2 + +require github.com/gorilla/websocket v1.5.3 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..25a9fc4 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= diff --git a/main.go b/main.go new file mode 100644 index 0000000..cec5440 --- /dev/null +++ b/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "log" + "net/http" + "sync" + + "github.com/gorilla/websocket" +) + +type webSocketHandler struct { + upgrader websocket.Upgrader +} + +// GLOBALS +var connections int = 0 +var wg sync.WaitGroup + +func (wsh webSocketHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + //upgrade http connection to websocket + connection, err := wsh.upgrader.Upgrade(w, r, nil) + if err != nil { + log.Printf("Error while upgrading connection to websocket: %s", err) + return + } + connections++ + log.Printf("New websocket connection. There are now %v\n", connections) + wg.Add(1) + go func() { + for { + + } + }() + defer connection.Close() +} + +func main() { + webSocketHandler := webSocketHandler{ + upgrader: websocket.Upgrader{}, + } + var port string = "8080" + http.Handle("/", webSocketHandler) + wg.Add(1) + log.Printf("listening on port %s...\n", port) + log.Fatal(http.ListenAndServe("localhost:8080", nil)) + wg.Wait() +}