https://github.com/tukangremot/gows
Websocket server that supports multipurpose
https://github.com/tukangremot/gows
chat-engine chat-server go go-package golang golang-package realtime-chat realtime-messaging websocket websocket-chat websocket-server
Last synced: 3 months ago
JSON representation
Websocket server that supports multipurpose
- Host: GitHub
- URL: https://github.com/tukangremot/gows
- Owner: tukangremot
- Created: 2024-02-16T12:27:39.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-19T12:35:37.000Z (about 2 years ago)
- Last Synced: 2024-06-21T15:17:54.889Z (about 2 years ago)
- Topics: chat-engine, chat-server, go, go-package, golang, golang-package, realtime-chat, realtime-messaging, websocket, websocket-chat, websocket-server
- Language: Go
- Homepage:
- Size: 13.7 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# GoWS
## Usage
### Example
#### Simple
```go
package main
import (
"flag"
"fmt"
"log"
"net/http"
"time"
"github.com/gorilla/websocket"
"github.com/tukangremot/gows"
)
var addr = flag.String("addr", ":8080", "http service address")
var upgrader = websocket.Upgrader{
ReadBufferSize: 4096,
WriteBufferSize: 4096,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func serveWs(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return
}
client := gows.NewClient(conn)
go client.WritePump()
go client.ReadPump()
// read message
for {
select {
case message := <-client.ReadMessage():
// do something whene receive a message
messageStr := string(message)
fmt.Println(messageStr)
// send message to client
client.SendMessage(message)
case err := <-client.GetError():
if err == gows.ErrClientDisconnected {
// do something if the client disconnects
fmt.Println(err)
} else {
//so something if something else goes wrong
fmt.Println(err)
}
}
}
}
func main() {
http.HandleFunc("/ws", serveWs)
httpServer := &http.Server{
Addr: *addr,
ReadHeaderTimeout: 3 * time.Second,
}
err := httpServer.ListenAndServe()
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
```