You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中基于Echo服务器实现同端口的Socket.IO服务

在同一端口运行Echo与Socket.IO服务器

不需要启动两个独立服务器,只需将Socket.IO的处理逻辑集成到Echo的路由体系中,共享同一个HTTP服务器实例即可。以下是具体实现方案:

实现步骤与代码示例

  1. 初始化Echo实例并注册HTTP路由
  2. 创建Socket.IO服务器并配置事件处理
  3. 将Socket.IO的请求处理挂载到Echo的指定路径下
  4. 通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:15:07