Golang中如何使用googollee/go-socket.io与Gin框架集成

Golang中如何使用googollee/go-socket.io与Gin框架集成 我想知道如何将 socket.io 与 Gin Gonic 结合使用。

package main

import (
"github.com/gin-gonic/gin"
"github.com/googollee/go-socket.io"
)
func main() {
    r := gin.Default()
    r.GET("/ping", socketioFunc)
    r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

func socketioFunc(c *gin.Context) {
//SOCKET IO STOFF
	c.JSON(200, gin.H{
		"message": "pong",
	})
}

更多关于Golang中如何使用googollee/go-socket.io与Gin框架集成的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

这个功能正常吗?如果不行,具体是哪里出了问题?

更多关于Golang中如何使用googollee/go-socket.io与Gin框架集成的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好,socket.io 的代码缺失了,因为我不知道如何实现。

是的,但我必须将其与 Gin Gonic 一起使用,并且需要在另一个函数中。

祝你好运。

意思是:“我必须”可能不足以说服库去做一些它们并非为此设计的事情(具体是什么?)。

关于如何使用 go-socket.io 的示例可以在这里找到:https://github.com/googollee/go-socket.io#example。也许可以像示例中使用 http.Handle 那样,将 socket-io 的 Server 注册到 Gin 中。但这应该发生在 main 函数里,而不是在 socketioFunc 中。

要将 googollee/go-socket.io 与 Gin 框架集成,你需要使用 socket.io 的服务器实例来处理 WebSocket 连接,并将 Gin 的路由与 Socket.IO 的路由分开处理。以下是一个完整的示例:

package main

import (
    "log"
    "net/http"

    "github.com/gin-gonic/gin"
    socketio "github.com/googollee/go-socket.io"
)

func main() {
    // 创建 Gin 路由器
    router := gin.Default()

    // 创建 Socket.IO 服务器
    server, err := socketio.NewServer(nil)
    if err != nil {
        log.Fatal(err)
    }

    // 处理 Socket.IO 连接事件
    server.OnConnect("/", func(s socketio.Conn) error {
        s.SetContext("")
        log.Println("connected:", s.ID())
        return nil
    })

    server.OnEvent("/", "notice", func(s socketio.Conn, msg string) {
        log.Println("notice:", msg)
        s.Emit("reply", "have "+msg)
    })

    server.OnError("/", func(s socketio.Conn, e error) {
        log.Println("meet error:", e)
    })

    server.OnDisconnect("/", func(s socketio.Conn, reason string) {
        log.Println("closed", reason)
    })

    // 启动 Socket.IO 服务器协程
    go server.Serve()
    defer server.Close()

    // 设置 Gin 路由
    router.GET("/socket.io/*any", gin.WrapH(server))
    router.POST("/socket.io/*any", gin.WrapH(server))

    // 普通 HTTP 路由
    router.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    // 启动 HTTP 服务器
    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", router))
}

这个示例展示了如何:

  1. 创建独立的 Socket.IO 服务器实例
  2. 设置 Socket.IO 的事件处理器
  3. Socket.IO 的路由挂载到 Gin 路由器上
  4. 同时支持普通的 HTTP 路由和 WebSocket 连接

客户端连接时需要使用 Socket.IO 客户端库,连接地址为 ws://localhost:8080/socket.io/

回到顶部