feat: 基本的websocket echo服务
This commit is contained in:
@ -10,20 +10,24 @@ import (
|
||||
"time"
|
||||
|
||||
"git.jinshen.cn/remilia/push-server/interval/api"
|
||||
"git.jinshen.cn/remilia/push-server/interval/hub"
|
||||
"git.jinshen.cn/remilia/push-server/interval/server"
|
||||
"git.jinshen.cn/remilia/push-server/interval/ws"
|
||||
)
|
||||
|
||||
func main() {
|
||||
serverCtx, serverCancel := context.WithCancel(context.Background())
|
||||
serverCtx, stop := signal.NotifyContext(
|
||||
context.Background(),
|
||||
os.Interrupt,
|
||||
syscall.SIGTERM,
|
||||
)
|
||||
defer func() {
|
||||
serverCancel()
|
||||
stop()
|
||||
}()
|
||||
|
||||
h := hub.NewHub()
|
||||
h := ws.NewHub()
|
||||
go h.Run(serverCtx)
|
||||
|
||||
httpServer := server.NewHTTPServer(":8080", api.NewRouter(h))
|
||||
httpServer := server.NewHTTPServer(":8080", api.NewRouter(h, serverCtx))
|
||||
|
||||
go func() {
|
||||
log.Println("Starting HTTP server on :8080")
|
||||
@ -32,16 +36,14 @@ func main() {
|
||||
}
|
||||
}()
|
||||
|
||||
sig := make(chan os.Signal, 1)
|
||||
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-sig
|
||||
<-serverCtx.Done()
|
||||
|
||||
log.Println("Shutting down server...")
|
||||
|
||||
serverCancel()
|
||||
|
||||
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), time.Second*10)
|
||||
defer shutdownCancel()
|
||||
|
||||
httpServer.Shutdown(shutdownCtx)
|
||||
if err := httpServer.Shutdown(shutdownCtx); err != nil {
|
||||
log.Printf("HTTP server shutdown error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
43
cmd/test-client/main.go
Normal file
43
cmd/test-client/main.go
Normal file
@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"github.com/coder/websocket"
|
||||
"github.com/coder/websocket/wsjson"
|
||||
)
|
||||
|
||||
func main() {
|
||||
log.Println("This is a test client.")
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
c, _, err := websocket.Dial(ctx, "ws://localhost:8080/ws", nil)
|
||||
if err != nil {
|
||||
log.Fatal("dial error:", err)
|
||||
return
|
||||
}
|
||||
defer c.CloseNow()
|
||||
|
||||
err = wsjson.Write(ctx, c, "Hello, WebSocket server!")
|
||||
if err != nil {
|
||||
log.Fatal("write error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
typ, msg, err := c.Read(ctx)
|
||||
if err != nil {
|
||||
log.Println("read error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
switch typ {
|
||||
case websocket.MessageText:
|
||||
log.Printf("Received text message: %s", string(msg))
|
||||
case websocket.MessageBinary:
|
||||
log.Printf("Received binary message: %v", msg)
|
||||
}
|
||||
|
||||
c.Close(websocket.StatusNormalClosure, "test client finished")
|
||||
}
|
||||
Reference in New Issue
Block a user