乐于分享
好东西不私藏

OpenClaw-渠道接入层 (Channel Layer)分析

OpenClaw-渠道接入层 (Channel Layer)分析

文档版本:2026.3.24  最后更新:2026-03-25

1. 层概述

职责: 连接各个消息平台,提供统一的消息收发接口

定位: Gateway 和外部消息平台之间的桥梁

核心特性:

  • • 多渠道支持 (9个内置聊天渠道 + 25+扩展平台)
  • • 统一消息抽象
  • • 插件化架构
  • • 独立故障隔离

内置聊天渠道 (9个,CHAT_CHANNEL_ORDER 顺序):
tg, whatsapp, discord, irc, googlechat, slack, signal, imessage, line

变更说明: IRC 和 Google Chat 自 v2026.3 起已升级为一级内置聊天渠道;
ACP(内部代理协议)和 Web(提供者接口)不再列于 CHAT_CHANNEL_META,各自以独立模块运行。

通道注册: src/channels/ids.ts (CHAT_CHANNEL_ORDER / CHANNEL_IDS常量)


2. 核心渠道实现 (extensions/)

2.1 WhatsApp (Baileys)

路径: extensions/whatsapp/ (插件通道)

: src/whatsapp/ 仅包含消息归一化工具,主要实现在extensions

协议: Baileys Web (开源 WhatsApp Web 协议实现)

功能:

  • • 扫码登录 (QR Code)
  • • 文本消息收发
  • • 媒体消息 (图片/音频/视频/文档)
  • • 群组消息
  • • 引用回复
  • • 状态更新

技术实现:

import makeWASocket from '@whiskeysockets/baileys'

export
 class WhatsAppChannel {
  private
 sock?: WASocket
  
  async
 start(): Promise<void> {
    const
 { state, saveCreds } = await useMultiFileAuthState('./auth')
    
    this
.sock = makeWASocket({
      auth
: state,
      printQRInTerminal
: true
    })
    
    this
.sock.ev.on('connection.update', this.handleConnection)
    this
.sock.ev.on('messages.upsert', this.handleMessage)
    this
.sock.ev.on('creds.update', saveCreds)
  }
  
  async
 sendMessage(to: string, content: string): Promise<void> {
    await
 this.sock!.sendMessage(to, { text: content })
  }
}

依赖: @whiskeysockets/baileys (7.0.0-rc.9)

2.2 TG (grammY)

路径: extensions/tele*/ (插件通道)

协议: TG Bot API

功能:

  • • Bot Token 认证
  • • 私聊和群组消息
  • • 内联键盘
  • • 媒体消息
  • • Webhook 模式
  • • 长轮询模式

技术实现:

import { Bot } from 'grammy'
import
 { run } from '@grammyjs/runner'

export
 class TelegramChannel {
  private
 bot: Bot
  
  async
 start(token: string): Promise<void> {
    this
.bot = new Bot(token)
    
    this
.bot.on('message', async (ctx) => {
      await
 this.handleMessage(ctx)
    })
    
    // 使用 runner 提高性能

    run
(this.bot)
  }
  
  async
 sendMessage(chatId: number, text: string): Promise<void> {
    await
 this.bot.api.sendMessage(chatId, text)
  }
}

依赖:

  • grammy (1.39.3)
  • @grammyjs/runner (2.0.3)
  • @grammyjs/transformer-throttler (1.2.1)

2.3 Slack (Bolt)

路径: extensions/slack/ (插件通道)

协议: Slack Bolt SDK

功能:

  • • Socket Mode (无需公网 IP)
  • • 事件订阅
  • • 斜杠命令
  • • 交互式消息
  • • 文件上传
  • • 线程回复

技术实现:

import { App } from '@slack/bolt'

export
 class SlackChannel {
  private
 app: App
  
  async
 start(token: string, appToken: string): Promise<void> {
    this
.app = new App({
      token,
      appToken,
      socketMode
: true
    })
    
    this
.app.message(async ({ message, say }) => {
      await
 this.handleMessage(message)
    })
    
    await
 this.app.start()
  }
  
  async
 sendMessage(channel: string, text: string): Promise<void> {
    await
 this.app.client.chat.postMessage({
      channel,
      text
    })
  }
}

依赖: @slack/bolt (4.6.0)

2.4 Discord

路径: extensions/discord/ (插件通道)

协议: Discord.js

功能:

  • • Bot Token 认证
  • • 文本频道消息
  • • 语音频道 (可选)
  • • 嵌入消息
  • • 按钮和选择菜单
  • • 斜杠命令

技术实现:

import { Client, GatewayIntentBits } from 'discord.js'

export
 class DiscordChannel {
  private
 client: Client
  
  async
 start(token: string): Promise<void> {
    this
.client = new Client({
      intents
: [
        GatewayIntentBits
.Guilds,
        GatewayIntentBits
.GuildMessages,
        GatewayIntentBits
.MessageContent
      ]
    })
    
    this
.client.on('messageCreate', async (message) => {
      await
 this.handleMessage(message)
    })
    
    await
 this.client.login(token)
  }
  
  async
 sendMessage(channelId: string, content: string): Promise<void> {
    const
 channel = await this.client.channels.fetch(channelId)
    if
 (channel?.isTextBased()) {
      await
 channel.send(content)
    }
  }
}

依赖: discord-api-types (0.38.40) + @snazzah/davey(DAVE 语音加密)

2.5 Google Chat

路径: src/channels/googlechat/, extensions/googlechat/

协议: Google Chat API

功能:

  • • Service Account 认证
  • • 空间消息
  • • 私聊消息
  • • 卡片消息
  • • 线程回复

技术实现:

import { google } from 'googleapis'

export
 class GoogleChatChannel {
  private
 chat: any
  
  async
 start(credentials: ServiceAccountCreds): Promise<void> {
    const
 auth = new google.auth.GoogleAuth({
      credentials,
      scopes
: ['https://www.googleapis.com/auth/chat.bot']
    })
    
    this
.chat = google.chat({ version: 'v1', auth })
  }
  
  async
 sendMessage(space: string, text: string): Promise<void> {
    await
 this.chat.spaces.messages.create({
      parent
: space,
      requestBody
: {
        text
      }
    })
  }
}

2.6 IRC

路径: extensions/irc/

协议: IRC(Internet Relay Chat)文本协议

特点: 自 v2026.3 起从扩展渠道升级为一级内置聊天渠道

功能:

  • • 传统 IRC 网络 DM / 频道路由
  • • Pairing 控制

2.7 LINE

路径: src/line/, extensions/line/

协议: LINE Messaging API

依赖: @line/bot-sdk (10.6.0)


3. 扩展渠道 (extensions/)

3.1 Signal

路径: extensions/signal/

协议: signal-cli

特点: 需要本地运行 signal-cli 守护进程

3.2 iMessage

路径: extensions/imessage/

协议: imsg (macOS only)

特点: 仅支持 macOS 系统

3.3 BlueBubbles

路径: extensions/bluebubbles/

协议: BlueBubbles Server API

特点: iMessage 服务器代理

3.4 Microsoft Teams

路径: extensions/msteams/

协议: Bot Framework

3.5 Matrix

路径: extensions/matrix/

协议: Matrix Client-Server API

3.6 Zalo / ZaloUser

路径: extensions/zalo/, extensions/zalouser/

协议: Zalo API

3.7 其他扩展

  • extensions/feishu/ - Feishu/Lark(飞书)
  • extensions/synology-chat/ - Synology Chat
  • extensions/tlon/ - Tlon (Urbit)
  • extensions/twitch/ - Twitch Chat
  • extensions/nostr/ - Nostr Protocol
  • extensions/nextcloud-talk/ - Nextcloud Talk
  • extensions/mattermost/ - Mattermost
  • extensions/voice-call/ - Voice Call(Telnyx 语音通话)
  • extensions/phone-control/ - 手机控制

3.8 新增扩展插件 (v2026.3)

Talk Voice (extensions/talk-voice/)

职责: 管理 Talk 语音选项(列出/设置语音角色),为语音通话渠道提供声音选择控制。

Thread Ownership (extensions/thread-ownership/)

职责: 防止多个代理同时在同一 Slack 线程中响应,通过调用 slack-forwarder 的 ownership API 实现线程级独占控制。

配置项:

       
                                           
字段说明
forwarderUrlslack-forwarder ownership API 基础 URL(默认 http://slack-forwarder:8750
abTestChannels实施线程所有权控制的 Slack 频道 ID 列表
       
     

4. 统一渠道接口

4.1 Channel 接口

// src/channels/channel.ts
export
 interface Channel {
  // 渠道元数据

  readonly
 id: string
  readonly
 name: string
  readonly
 type: ChannelType
  
  // 生命周期

  start
(config: ChannelConfig): Promise<void>
  stop
(): Promise<void>
  restart
(): Promise<void>
  
  // 消息收发

  sendMessage
(target: MessageTarget, content: MessageContent): Promise<void>
  onMessage
(handler: MessageHandler): void
  
  // 状态查询

  getStatus
(): ChannelStatus
  isConnected
(): boolean
  
  // 能力查询

  supports
(capability: Capability): boolean
}

export
 interface MessageTarget {
  type
: 'user' | 'group' | 'channel'
  id
: string
}

export
 interface MessageContent {
  text
?: string
  media
?: MediaAttachment[]
  replyTo
?: string
  metadata
?: Record<string, any>
}

export
 type MessageHandler = (message: InboundMessage) => Promise<void>

export
 interface InboundMessage {
  id
: string
  channel
: string
  from
: MessageTarget
  to
: MessageTarget
  content
: MessageContent
  timestamp
: Date
}

4.2 Channel Manager

实际路径: src/gateway/server-channels.ts (createChannelManager)

// 集成在Gateway Runtime中,不是独立类
export
 function createChannelManager(opts) {
  private
 channels: Map<string, Channel> = new Map()
  
  async
 register(channel: Channel): Promise<void> {
    this
.channels.set(channel.id, channel)
  }
  
  async
 startAll(): Promise<void> {
    for
 (const channel of this.channels.values()) {
      try
 {
        await
 channel.start(this.getConfig(channel.id))
        logger.info(`Started channel: ${channel.id}`)
      } catch (error) {
        logger.error(`Failed to start channel: ${channel.id}`, error)
      }
    }
  }
  
  async
 stopAll(): Promise<void> {
    for
 (const channel of this.channels.values()) {
      await
 channel.stop()
    }
  }
  
  async
 send(
    channelId
: string,
    target
: MessageTarget,
    content
: MessageContent
  ): Promise<void> {
    const
 channel = this.channels.get(channelId)
    if
 (!channel) {
      throw
 new Error(`Channel not found: ${channelId}`)
    }
    
    await
 channel.sendMessage(target, content)
  }
  
  getStatus
(): ChannelStatusMap {
    const
 status: ChannelStatusMap = {}
    
    for
 (const [id, channel] of this.channels) {
      status[id] = channel.getStatus()
    }
    
    return
 status
  }
}

5. 消息处理流程

5.1 入站消息流

外部平台 (WhatsApp/Telegram/etc.)
  ↓ Platform Event
渠道实现 (WhatsAppChannel/TGChannel/etc.)
  ↓ 转换为统一格式
ChannelManager
  ↓ 发布渠道事件
Gateway 事件总线
  ↓ 订阅者处理
消息路由层

5.2 出站消息流

AI 代理响应
  ↓
消息路由层
  ↓ 确定目标渠道
ChannelManager
  ↓ 查找渠道实例
渠道实现
  ↓ 平台特定格式
外部平台 API

6. 技术实现细节

6.1 渠道生命周期

// src/channels/base-channel.ts
export
 abstract class BaseChannel implements Channel {
  protected
 status: ChannelStatus = 'disconnected'
  protected
 messageHandlers: MessageHandler[] = []
  
  abstract
 async connect(): Promise<void>
  abstract
 async disconnect(): Promise<void>
  abstract
 async sendRaw(message: any): Promise<void>
  
  async
 start(config: ChannelConfig): Promise<void> {
    this
.config = config
    this
.status = 'connecting'
    
    try
 {
      await
 this.connect()
      this
.status = 'connected'
      this
.emit('connected')
    } catch (error) {
      this
.status = 'error'
      this
.emit('error', error)
      throw
 error
    }
  }
  
  async
 stop(): Promise<void> {
    this
.status = 'disconnecting'
    await
 this.disconnect()
    this
.status = 'disconnected'
    this
.emit('disconnected')
  }
  
  async
 restart(): Promise<void> {
    await
 this.stop()
    await
 new Promise(resolve => setTimeout(resolve, 1000))
    await
 this.start(this.config)
  }
  
  protected
 handleIncomingMessage(platformMessage: any): void {
    // 转换为统一格式

    const
 message = this.transformMessage(platformMessage)
    
    // 调用所有处理器

    for
 (const handler of this.messageHandlers) {
      handler
(message).catch(error => {
        logger.error('Message handler error', error)
      })
    }
  }
  
  abstract
 transformMessage(platformMessage: any): InboundMessage
}

6.2 媒体处理

// src/channels/media-handler.ts
export
 class MediaHandler {
  async
 downloadMedia(url: string): Promise<Buffer> {
    const
 response = await fetch(url)
    return
 Buffer.from(await response.arrayBuffer())
  }
  
  async
 uploadMedia(
    channel
: Channel,
    media
: Buffer,
    type
: MediaType
  ): Promise<string> {
    // 特定渠道的上传逻辑

    if
 (channel.type === 'telegram') {
      return
 await this.uploadToTelegram(media, type)
    }
    
    // 通用上传

    return
 await this.uploadToStorage(media, type)
  }
  
  async
 processMedia(
    media
: Buffer,
    options
: ProcessOptions
  ): Promise<Buffer> {
    // 使用媒体管道处理

    const
 pipeline = createMediaPipeline()
    return
 await pipeline.process(media, options)
  }
}

6.3 错误恢复

// src/channels/error-recovery.ts
export
 class ChannelRecovery {
  private
 retryCount: Map<string, number> = new Map()
  private
 maxRetries = 3
  private
 backoffMs = 5000
  
  async
 recover(channel: Channel, error: Error): Promise<void> {
    const
 retries = this.retryCount.get(channel.id) || 0
    
    if
 (retries >= this.maxRetries) {
      logger.error(`Max retries exceeded for channel: ${channel.id}`)
      this
.emit('recovery_failed', channel, error)
      return

    }
    
    // 指数退避

    const
 delay = this.backoffMs * Math.pow(2, retries)
    await
 new Promise(resolve => setTimeout(resolve, delay))
    
    try
 {
      await
 channel.restart()
      this
.retryCount.set(channel.id, 0)
      logger.info(`Successfully recovered channel: ${channel.id}`)
    } catch (retryError) {
      this
.retryCount.set(channel.id, retries + 1)
      await
 this.recover(channel, retryError)
    }
  }
}

7. 渠道配置

7.1 配置结构

channels:
  whatsapp:

    enabled:
 true
    sessionDir:
 ~/.openclaw/sessions/whatsapp
    autoReconnect:
 true
    
  slack:

    enabled:
 true
    token:
 env:SLACK_BOT_TOKEN
    appToken:
 env:SLACK_APP_TOKEN
    socketMode:
 true
    
  discord:

    enabled:
 true
    token:
 env:DISCORD_BOT_TOKEN
    intents:

      -
 guilds
      -
 guildMessages
      -
 messageContent

7.2 环境变量

# Telegram
export
 TELEGRAM_BOT_TOKEN="123456:ABC-DEF..."

# Slack

export
 SLACK_BOT_TOKEN="xoxb-..."
export
 SLACK_APP_TOKEN="xapp-..."

# Discord

export
 DISCORD_BOT_TOKEN="MTk..."

# Google Chat

export
 GOOGLE_CHAT_CREDENTIALS='{"type":"service_account",...}'

8. 安全特性

8.1 消息验证

// src/channels/message-validator.ts
export
 class MessageValidator {
  validate
(message: InboundMessage): ValidationResult {
    // 验证消息来源

    if
 (!this.isValidSender(message.from)) {
      return
 { valid: false, reason: 'Invalid sender' }
    }
    
    // 验证消息内容

    if
 (!this.isValidContent(message.content)) {
      return
 { valid: false, reason: 'Invalid content' }
    }
    
    // 验证消息大小

    if
 (this.isOversized(message)) {
      return
 { valid: false, reason: 'Message too large' }
    }
    
    return
 { valid: true }
  }
}

8.2 速率限制

// src/channels/rate-limiter.ts
export
 class ChannelRateLimiter {
  private
 limits: Map<string, RateLimit> = new Map()
  
  async
 checkLimit(channel: string, action: string): Promise<boolean> {
    const
 key = `${channel}:${action}`
    const
 limit = this.limits.get(key) || this.createLimit()
    
    return
 await limit.check()
  }
  
  private
 createLimit(): RateLimit {
    // Telegram: 30 messages per second

    // WhatsApp: Unlimited (但建议限制)

    // Slack: 1 message per second per channel

    return
 new RateLimit({
      maxRequests
: 30,
      windowMs
: 1000
    })
  }
}

9. 性能优化

9.1 连接复用

// 复用 WebSocket 连接
export
 class ConnectionPool {
  private
 connections: Map<string, WebSocket> = new Map()
  
  getConnection
(url: string): WebSocket {
    if
 (!this.connections.has(url)) {
      const
 ws = new WebSocket(url)
      this
.connections.set(url, ws)
    }
    
    return
 this.connections.get(url)!
  }
}

9.2 消息批处理

// 批量发送消息
export
 class MessageBatcher {
  private
 queue: OutboundMessage[] = []
  private
 flushInterval = 100
  
  enqueue
(message: OutboundMessage): void {
    this
.queue.push(message)
    
    if
 (this.queue.length >= 10) {
      this
.flush()
    }
  }
  
  private
 async flush(): Promise<void> {
    const
 batch = this.queue.splice(0)
    await
 this.sendBatch(batch)
  }
}

10. 总结

渠道接入层是 OpenClaw 的多平台桥梁,提供:

  • 广泛兼容: 25+ 消息平台支持
  • 统一抽象: 一致的消息接口
  • 插件化: 独立扩展包
  • 健壮性: 错误恢复和重连
  • 安全性: 消息验证和速率限制
  • 高性能: 连接复用和批处理

v2026.3 变更摘要:

  • • IRC 和 Google Chat 升级为一级内置聊天渠道(与 Telegram、Slack 等同级)
  • • 新增 Talk Voice 扩展插件(语音选择管理)
  • • 新增 Thread Ownership 扩展插件(Slack 多代理线程冲突防护)

使得 OpenClaw 能够跨越不同平台,为用户提供统一的 AI 助手体验。

                 
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 18:10:58 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/488726.html
  2. 运行时间 : 0.178450s [ 吞吐率:5.60req/s ] 内存消耗:4,761.58kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=20266286c55024255f50660328df9222
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.68 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000851s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001529s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001034s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000741s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001521s ]
  6. SELECT * FROM `set` [ RunTime:0.003727s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001539s ]
  8. SELECT * FROM `article` WHERE `id` = 488726 LIMIT 1 [ RunTime:0.020097s ]
  9. UPDATE `article` SET `lasttime` = 1774606258 WHERE `id` = 488726 [ RunTime:0.011914s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000608s ]
  11. SELECT * FROM `article` WHERE `id` < 488726 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001124s ]
  12. SELECT * FROM `article` WHERE `id` > 488726 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001202s ]
  13. SELECT * FROM `article` WHERE `id` < 488726 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007489s ]
  14. SELECT * FROM `article` WHERE `id` < 488726 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008540s ]
  15. SELECT * FROM `article` WHERE `id` < 488726 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006507s ]
0.180149s