如何在Golang中基于Echo服务器实现同端口的Socket.IO服务
在同一端口运行Echo与Socket.IO服务器
不需要启动两个独立服务器,只需将Socket.IO的处理逻辑集成到Echo的路由体系中,共享同一个HTTP服务器实例即可。以下是具体实现方案:
实现步骤与代码示例
- 初始化Echo实例并注册HTTP路由
- 创建Socket.IO服务器并配置事件处理
- 将Socket.IO的请求处理挂载到Echo的指定路径下
- 通过Echo启动服务器,实现同一端口复用
package main import ( "github.com/labstack/echo/v4" "github.com/googollee/go-socket.io" ) func main() { // 初始化Echo应用 e := echo.New() // 注册你的HTTP接口 e.POST("/register", func(c echo.Context) error { // 这里替换为你的handlers.Register逻辑 return c.String(200, "注册成功") }) // 初始化Socket.IO服务器 ioServer, err := socketio.NewServer(nil) if err != nil { e.Logger.Fatal("初始化Socket.IO失败: ", err) } // 配置Socket.IO连接事件 ioServer.OnConnect("/", func(s socketio.Conn) error { e.Logger.Info("新客户端已连接") return nil }) // 配置Socket.IO消息处理事件 ioServer.OnEvent("/", "chat", func(s socketio.Conn, msg string) { e.Logger.Info("收到消息: ", msg) s.Emit("chat_reply", "服务器已接收消息: "+msg) }) // 将Socket.IO请求转发给其服务器处理 e.Any("/socket.io/", func(c echo.Context) error { ioServer.ServeHTTP(c.Response(), c.Request()) return nil }) // 启动服务器,所有请求(HTTP+Socket.IO)共享5000端口 e.Logger.Fatal(e.Start(":5000")) }
关键说明
- Socket.IO的客户端请求默认会指向
/socket.io/路径,通过Echo的Any方法将该路径下的所有请求转发给Socket.IO服务器处理 - 整个应用仅启动一个HTTP服务器,由Echo管理,避免端口冲突
- 确保已安装依赖包:
go get github.com/labstack/echo/v4 go get github.com/googollee/go-socket.io
内容的提问来源于stack exchange,提问作者Haitham BH
相关产品推荐
相关产品推荐

