gowebsocketgo-fiber

Using Websocket on goFiber


I try to sent console output of the execution command to html page via Websocket. I did not understand completely goFiber websocket example codes on this offical webpage. Firstly I think that I should sent only some dummy text to client. I watched some tutorial about websocket on youtube but this is not still clear me.

I speared some callback function to ws package but I don't know how will sent different message and how client will receive this message by connection websocket. I share my ws package and main.go code statements.

package ws

import (
    "log"

    "github.com/gofiber/contrib/websocket"
    "github.com/gofiber/fiber/v2"
)

var WsUpgrade = func(c *fiber.Ctx) error {

    if websocket.IsWebSocketUpgrade(c) {
        c.Locals("allowed", true)
        return c.Next()
    }

    return fiber.ErrUpgradeRequired
}

var WsWriteMessage = func(c *websocket.Conn) {

    var (
            mt  int
            msg []byte
            err error
        )
        for {
            if mt, msg, err = c.ReadMessage(); err != nil {
                log.Println("read:", err)
                break
            }
            log.Printf("recv: %s", msg)

            if err = c.WriteMessage(mt, msg); err != nil {
                log.Println("write:", err)
                break
            }
        }
}
package main

import (
    "fiber-app/pkg/ws"

    "github.com/gofiber/contrib/websocket"
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/template/html/v2"
)

func main() {

    engine := html.New("./views", ".html")
    appconf := fiber.Config{Views: engine}

    app := fiber.New(appconf)

    app.Static("/", "./public")

    app.Use("/ws", ws.WsUpgrade)

    app.Get("/ws/progress/:id", websocket.New(ws.WsWriteMessage))

    app.Listen(":5000")
}

When I request on browser (ws://machine-ip:5000/ws/progress/123), browser response like "This site can't be reached".


Solution

  • There is not any wrong statement on server-side code blocks. I should just add websocket listener on client side. I couldn't any message because client did not listen to server. I applied below statements on browser console and it's work.

    // Create WebSocket connection.
    const ws = new WebSocket("ws://hostip:5000");
    
    // Connection opened
    ws.addEventListener("open", (event) => {
      ws.send("Hello Server!");
    });
    
    // Listen for messages
    ws.addEventListener("message", (event) => {
      console.log("Message from server ", event.data);
    });
    

    Now, I should start to code client-side.