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

Adonis 6集成WebSocket.io遇阻,请求技术指导

Adonis 6 集成 Socket.io 完整方案

核心导入问题修正

Adonis 6 重构了核心模块结构,你提到的 import { AdonisServer } from '@adonisjs/core/app' 在Adonis 6中已被废弃。替代方案是直接从 @adonisjs/core/server 导入内置的服务器实例,或通过应用服务获取HTTP服务器:

// 方式1:直接导入server实例
import { server } from '@adonisjs/core/server'

// 方式2:通过应用服务获取
import app from '@adonisjs/core/services/app'
const httpServer = app.get('server')

完整集成步骤

  1. 安装依赖
    安装Socket.io及类型定义:

    npm install socket.io
    npm install -D @types/socket.io
    
  2. 初始化Socket.io
    在 start/server.ts 文件中添加Socket.io初始化逻辑(Adonis 6启动时会自动加载该文件):

    import { server } from '@adonisjs/core/server'
    import { Server } from 'socket.io'
    
    // 基于Adonis的HTTP服务器实例创建Socket.io服务
    const io = new Server(server.instance, {
      // 可选:配置Socket.io选项,比如CORS
      cors: {
        origin: '*', // 根据实际生产环境调整
        credentials: true
      }
    })
    
    // 监听客户端连接事件
    io.on('connection', (socket) => {
      console.log(`客户端已连接: ${socket.id}`)
    
      // 监听自定义消息事件
      socket.on('client:message', (payload) => {
        console.log('收到客户端消息:', payload)
        // 向发送者回复消息
        socket.emit('server:response', `已接收消息:${payload}`)
        // 向所有客户端广播消息(除发送者外)
        socket.broadcast.emit('server:broadcast', `${socket.id} 说:${payload}`)
      })
    
      // 监听客户端断开事件
      socket.on('disconnect', () => {
        console.log(`客户端已断开: ${socket.id}`)
      })
    })
    
  3. 前端连接示例
    前端项目中安装 socket.io-client 后,即可建立连接:

    import { io } from 'socket.io-client'
    
    const socket = io('http://localhost:3333')
    
    socket.on('connect', () => {
      console.log('成功连接到服务器')
      socket.emit('client:message', 'Hello Adonis 6 Socket.io!')
    })
    
    socket.on('server:response', (data) => {
      console.log('服务器回复:', data)
    })
    
    socket.on('server:broadcast', (data) => {
      console.log('广播消息:', data)
    })
    

常见问题处理

  • CORS错误:如果前端出现跨域问题,除了在Socket.io配置中设置CORS,还需确保Adonis 6的config/cors.ts配置允许对应的请求来源:
    export default {
      enabled: true,
      origin: ['http://localhost:5173'], // 替换为你的前端地址
      methods: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'],
      headers: true,
      credentials: true,
      maxAge: 90,
    }
    
  • 服务器实例获取失败:确保代码在Adonis应用启动流程中执行,start/server.ts是官方推荐的服务初始化位置,不要在其他未被自动加载的文件中执行。

内容的提问来源于stack exchange,提问作者LarvePoire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:07:51