lxzan / gws

simple, fast, reliable websocket server & client, supports running over tcp/kcp/unix domain socket. keywords: ws, proxy, chat, go, golang...
https://pkg.go.dev/github.com/lxzan/gws
Apache License 2.0
1.34k stars 84 forks source link

ws not working? using echo framework #97

Closed 0xMALVEE closed 2 months ago

0xMALVEE commented 2 months ago

main.go

package main

import (
    "net/http"

    "github.com/labstack/echo/v4"
    "github.com/lxzan/gws"
)

func main() {
    // web server
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Logger.Fatal(e.Start(":1323"))

    // ws server
    upgrader  := gws.NewUpgrader(&WebSocketHandler{}, &gws.ServerOption{
        ParallelEnabled:  true,                                 
        Recovery:          gws.Recovery,                         
        PermessageDeflate: gws.PermessageDeflate{Enabled: true}, 
    })

    // default ws route
    e.GET("/connect", func(c echo.Context) error {
        socket, err := upgrader.Upgrade(c.Response().Writer, c.Request());

        if err != nil {
            return err
        }
        go func() {
            socket.ReadLoop() 
        }()
        return nil
    })
}

ws.go

package main

import (
    "log"
    "time"

    "github.com/lxzan/gws"
)

type WebSocketHandler struct{}

func (h *WebSocketHandler) OnOpen(conn *gws.Conn) {
    log.Println("Connection opened")
}

func (h *WebSocketHandler) OnMessage(conn *gws.Conn, message *gws.Message) {
    log.Println("Received message:", string(message.Data.String()))

    err := conn.WriteMessage(gws.OpcodeText, []byte("Hello, World!"))
    if err != nil {
        log.Println("Write error:", err)
    }
}

func (h *WebSocketHandler) OnClose(conn *gws.Conn, err error) {
    log.Println("Connection closed:", err)
}

func (c *WebSocketHandler) OnPing(socket *gws.Conn, payload []byte) {
    _ = socket.SetDeadline(time.Now().Add(PingInterval + PingWait))
    _ = socket.WritePong(nil)
}

func (c *WebSocketHandler) OnPong(socket *gws.Conn, payload []byte) {}

const (
    PingInterval = 5 * time.Second
    PingWait     = 10 * time.Second
)

Error image

lxzan commented 2 months ago

There's something wrong with the code, you should register the route before starting the HTTP Server.

0xMALVEE commented 2 months ago

There's something wrong with the code, you should register the route before starting the HTTP Server.

thanks it's working my was a dumb mistake by me xd image