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".
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.