Files
NebulaShell/store/@{FutureOSS}/ws-api/router.py
Falck 76147bae94 初始提交 - FutureOSS v1.0 插件化运行时框架
一切皆为插件的开发者工具运行时框架

🧩 核心特性:
  - 插件热插拔 (importlib 动态加载)
  - 依赖自动解析 (拓扑排序 + 循环检测)
  - 企业级稳定 (熔断/降级/重试/隔离)
  - 事件驱动 (发布/订阅事件总线)
  - 完整配置 (YAML 配置 + 热重载)
2026-04-06 09:57:10 +08:00

40 lines
1.0 KiB
Python

"""WebSocket 路由器"""
import json
import asyncio
from typing import Callable, Optional, Any
from .server import WsClient
class WsRoute:
"""WebSocket 路由"""
def __init__(self, path: str, handler: Callable):
self.path = path
self.handler = handler
class WsRouter:
"""WebSocket 路由器"""
def __init__(self):
self.routes: dict[str, WsRoute] = {}
def on_message(self, path: str, handler: Callable):
"""注册消息路由"""
self.routes[path] = WsRoute(path, handler)
async def handle(self, client: WsClient, path: str, message: str):
"""处理消息"""
# 精确匹配
if path in self.routes:
await self.routes[path].handler(client, message)
return
# 前缀匹配
for route_path, route in self.routes.items():
if path.startswith(route_path):
await route.handler(client, message)
return
# 无匹配路由
await client.send({"error": "No handler for path", "path": path})