跳到主要内容

WebSocket 示例

Github StackBlitz

本示例演示了如何使用 Go Fiber 构建一个简单的 WebSocket 应用。

描述

本项目提供了使用 Go Fiber 构建 WebSocket 服务器的基本设置。它包含了运行实时 WebSocket 服务器所需的配置和代码。

要求

  • Go 1.18 或更高版本
  • Git

项目结构

  • main.go: 应用的主入口点。
  • go.mod: Go 模块文件。

设置

  1. 克隆仓库

    git clone https://github.com/gofiber/recipes.git
    cd recipes/websocket
  2. 安装依赖

    go mod download
  3. 运行应用

    go run main.go

应用现在应该正在 http://localhost:3000 上运行。

WebSocket 端点

  • GET /ws: 应用的 WebSocket 端点。

使用示例

  1. 连接到 WebSocket 服务器地址 ws://localhost:3000/ws
  2. 向服务器发送一条消息。
  3. 服务器会将消息回显给客户端。

代码概览

main.go

主 Go 文件设置了 Fiber 应用,处理 WebSocket 连接,并管理 WebSocket 通信。

package main

import (
"fmt"
"log"

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

func main() {
app := fiber.New()

// Optional middleware
app.Use("/ws", func(c *fiber.Ctx) error {
if c.Get("host") == "localhost:3000" {
c.Locals("Host", "Localhost:3000")
return c.Next()
}
return c.Status(403).SendString("Request origin not allowed")
})

// Upgraded websocket request
app.Get("/ws", websocket.New(func(c *websocket.Conn) {
fmt.Println(c.Locals("Host")) // "Localhost:3000"
for {
mt, msg, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("recv: %s", msg)
err = c.WriteMessage(mt, msg)
if err != nil {
log.Println("write:", err)
break
}
}
}))

// ws://localhost:3000/ws
log.Fatal(app.Listen(":3000"))
}

总结

本示例提供了使用 Go Fiber 构建 WebSocket 服务器的基本设置。可以进一步扩展和定制以满足更复杂应用的需求。

参考资料