- Backend (FastAPI, SQLAlchemy 2, Alembic): single-admin cookie auth, news/crawler/market APIs with SSE and WebSocket streaming - Crawler (Scrapy + Scrapy-Redis): wscn_news, wscn_live, cls_depth, cls_telegraph spiders, idempotent upserts with revisions, raw response archiving, per-source subprocess supervision, restart and backoff - Market worker: full-history Binance spot/USD-M kline backfill, realtime WS stream, hourly and on-reconnect catch-up - Frontend (Vue 3, Element Plus, UnoCSS, KLineChart): news feed, crawler console with live logs, Binance-style chart page - Deploy: docker compose, nginx site, migrate and daily backup scripts
11 lines
527 B
TypeScript
11 lines
527 B
TypeScript
/** 订阅 SSE 事件;组件卸载时关闭。断线由浏览器自动重连 */
|
|
export function useEventSource<T>(url: string, event: string, onMessage: (data: T) => void) {
|
|
const connected = ref(false)
|
|
const source = new EventSource(url)
|
|
source.addEventListener("open", () => connected.value = true)
|
|
source.addEventListener("error", () => connected.value = false)
|
|
source.addEventListener(event, e => onMessage(JSON.parse((e as MessageEvent).data)))
|
|
onBeforeUnmount(() => source.close())
|
|
return { connected }
|
|
}
|