# ticker **Repository Path**: moran_4/ticker ## Basic Information - **Project Name**: ticker - **Description**: rust tiker - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-03 - **Last Updated**: 2025-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 股票报价系统 (Stock Ticker System) ## 项目概述 股票报价系统是一个实时股票价格监控和展示平台,提供股票价格查询、实时更新、价格预警、历史数据分析等功能。系统采用现代化的Web技术栈,支持多用户并发访问和实时数据推送。 ## 功能特性 ### 核心功能 - **实时股票报价**: 支持多个股票市场的实时价格获取和展示 - **股票搜索**: 快速搜索和查找股票代码和公司信息 - **价格预警**: 用户可设置价格阈值,触发时发送通知 - **历史数据**: 查看股票的历史价格走势和技术指标 - **投资组合**: 用户可创建和管理个人投资组合 - **市场概览**: 显示主要市场指数和热门股票 ### 高级功能 - **技术分析**: 提供常用技术指标(MA、RSI、MACD等) - **新闻集成**: 集成相关财经新闻和公告 - **数据导出**: 支持历史数据CSV/Excel导出 - **移动端适配**: 响应式设计,支持移动设备访问 - **多语言支持**: 中英文界面切换 ## 系统架构 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 前端应用 │ │ 后端API │ │ 数据存储 │ │ (React) │◄──►│ (Rust/Actix) │◄──►│ (MongoDB) │ │ │ │ │ │ │ │ - 用户界面 │ │ - RESTful API │ │ - 股票数据 │ │ - 实时更新 │ │ - WebSocket │ │ - 用户数据 │ │ - 图表展示 │ │ - 高性能处理 │ │ - 历史记录 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ ┌─────────────────┐ │ └──────────────►│ 缓存层 │◄─────────────┘ │ (Redis) │ │ │ │ - 实时价格 │ │ - 会话管理 │ │ - 频率限制 │ └─────────────────┘ │ ┌─────────────────┐ │ 外部数据源 │ │ │ │ - Alpha Vantage │ │ - Yahoo Finance │ │ - IEX Cloud │ └─────────────────┘ ``` ## 技术栈 ### 前端 - **框架**: React 18 + TypeScript - **状态管理**: Redux Toolkit - **UI组件**: Ant Design / Material-UI - **图表库**: Chart.js / D3.js - **实时通信**: Socket.io-client - **构建工具**: Vite - **样式**: Tailwind CSS ### 后端 - **语言**: Rust 1.70+ - **框架**: Actix-web - **异步运行时**: Tokio - **实时通信**: Actix-web WebSocket + Server-Sent Events - **认证**: JWT + jsonwebtoken crate - **数据验证**: Serde + Validator - **API文档**: Utoipa (OpenAPI) - **数据库ORM**: SeaORM / SQLx ### 数据库 - **主数据库**: MongoDB (用户数据、配置) - **缓存**: Redis (实时价格、会话) - **时序数据**: InfluxDB (可选,用于历史价格数据) ### 部署与运维 - **容器化**: Docker + Docker Compose - **反向代理**: Nginx - **进程管理**: PM2 - **监控**: Prometheus + Grafana - **日志**: Winston + ELK Stack ## 项目结构 ``` ticker/ ├── frontend/ # 前端应用 │ ├── src/ │ │ ├── components/ # React组件 │ │ ├── pages/ # 页面组件 │ │ ├── hooks/ # 自定义Hooks │ │ ├── store/ # Redux状态管理 │ │ ├── services/ # API服务 │ │ ├── utils/ # 工具函数 │ │ └── types/ # TypeScript类型定义 │ ├── public/ # 静态资源 │ └── package.json ├── backend/ # Rust后端应用 │ ├── src/ │ │ ├── handlers/ # 请求处理器 │ │ ├── models/ # 数据模型 │ │ ├── routes/ # 路由定义 │ │ ├── services/ # 业务逻辑 │ │ ├── middleware/ # 中间件 │ │ ├── utils/ # 工具函数 │ │ ├── config/ # 配置管理 │ │ ├── db/ # 数据库连接 │ │ └── main.rs # 应用入口 │ ├── tests/ # 测试文件 │ ├── Cargo.toml # Rust依赖配置 │ └── Cargo.lock # 依赖锁定文件 ├── shared/ # 共享代码 │ └── types/ # 共享类型定义 ├── docker/ # Docker配置 ├── docs/ # 文档 ├── scripts/ # 脚本文件 └── docker-compose.yml ``` ## API设计 ### 认证相关 ``` POST /api/auth/register # 用户注册 POST /api/auth/login # 用户登录 POST /api/auth/logout # 用户登出 GET /api/auth/profile # 获取用户信息 PUT /api/auth/profile # 更新用户信息 ``` ### 股票数据 ``` GET /api/stocks/search?q={query} # 搜索股票 GET /api/stocks/{symbol} # 获取股票详情 GET /api/stocks/{symbol}/price # 获取实时价格 GET /api/stocks/{symbol}/history # 获取历史数据 GET /api/stocks/trending # 获取热门股票 GET /api/markets/indices # 获取市场指数 ``` ### 用户功能 ``` GET /api/watchlist # 获取关注列表 POST /api/watchlist # 添加到关注列表 DELETE /api/watchlist/{symbol} # 从关注列表移除 GET /api/alerts # 获取价格预警 POST /api/alerts # 创建价格预警 PUT /api/alerts/{id} # 更新价格预警 DELETE /api/alerts/{id} # 删除价格预警 ``` ### WebSocket事件 ``` connection # 客户端连接 subscribe:{symbol} # 订阅股票价格更新 unsubscribe:{symbol} # 取消订阅 price_update # 价格更新推送 alert_triggered # 预警触发通知 ``` ## 数据库设计 ### MongoDB集合 #### users (用户表) ```javascript { _id: ObjectId, email: String, password: String, // 加密存储 username: String, avatar: String, preferences: { theme: String, language: String, currency: String }, createdAt: Date, updatedAt: Date } ``` #### watchlists (关注列表) ```javascript { _id: ObjectId, userId: ObjectId, symbols: [String], name: String, createdAt: Date, updatedAt: Date } ``` #### alerts (价格预警) ```javascript { _id: ObjectId, userId: ObjectId, symbol: String, condition: String, // 'above' | 'below' targetPrice: Number, currentPrice: Number, isActive: Boolean, isTriggered: Boolean, createdAt: Date, triggeredAt: Date } ``` ### Redis数据结构 ``` stock:prices:{symbol} # 实时价格数据 user:session:{sessionId} # 用户会话 rate_limit:{ip}:{endpoint} # API频率限制 market:status # 市场开盘状态 ``` ## 安装与运行 ### 环境要求 - Rust 1.70+ (推荐使用rustup安装) - Cargo (Rust包管理器) - MongoDB 5.0+ - Redis 6.0+ - Node.js 18+ (仅用于前端) - Docker (可选) ### 本地开发 1. **克隆项目** ```bash git clone https://github.com/your-username/ticker.git cd ticker ``` 2. **安装依赖** ```bash # 确保Rust环境已安装 rustc --version cargo --version # 构建后端项目(首次运行会自动下载依赖) cd backend cargo build # 安装前端依赖 cd ../frontend npm install ``` 3. **环境配置** ```bash # 复制环境变量模板 cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env # 编辑环境变量 # 配置数据库连接、API密钥等 ``` 4. **启动服务** ```bash # 启动后端服务(开发模式) cd backend cargo run # 或者使用cargo-watch进行热重载(需要先安装:cargo install cargo-watch) cargo watch -x run # 启动前端服务 cd ../frontend npm run dev ``` ### Docker部署 ```bash # 构建并启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f ``` ## 主要依赖配置 ### Cargo.toml 示例 ```toml [package] name = "ticker-backend" version = "0.1.0" edition = "2021" [dependencies] # Web框架 actix-web = "4.4" actix-cors = "0.6" actix-files = "0.6" # 异步运行时 tokio = { version = "1.0", features = ["full"] } # 序列化 serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" # 数据库 mongodb = "2.7" redis = { version = "0.23", features = ["tokio-comp"] } sea-orm = { version = "0.12", features = ["sqlx-postgres", "runtime-tokio-rustls", "macros"] } # JWT认证 jsonwebtoken = "9.1" bcrypt = "0.15" # HTTP客户端 reqwest = { version = "0.11", features = ["json"] } # 配置管理 config = "0.13" dotenv = "0.15" # 日志 log = "0.4" env_logger = "0.10" # 数据验证 validator = { version = "0.16", features = ["derive"] } # WebSocket actix-web-actors = "4.2" # 错误处理 anyhow = "1.0" thiserror = "1.0" # 时间处理 chrono = { version = "0.4", features = ["serde"] } # UUID uuid = { version = "1.0", features = ["v4", "serde"] } [dev-dependencies] actix-rt = "2.8" ``` ## 环境变量配置 ### 后端环境变量 (.env) ```bash # 服务配置 SERVER_HOST=127.0.0.1 SERVER_PORT=3000 RUST_ENV=development RUST_LOG=debug # 数据库配置 DATABASE_URL=mongodb://localhost:27017/ticker REDIS_URL=redis://localhost:6379 # JWT配置 JWT_SECRET=your-jwt-secret JWT_EXPIRES_IN=604800 # 7 days in seconds # 外部API配置 ALPHA_VANTAGE_API_KEY=your-api-key IEX_CLOUD_API_KEY=your-api-key YAHOO_FINANCE_API_KEY=your-api-key # 邮件配置 SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your-email@gmail.com SMTP_PASS=your-app-password # 性能配置 WORKER_THREADS=4 MAX_CONNECTIONS=1000 ``` ### 前端环境变量 (.env) ```bash VITE_API_BASE_URL=http://localhost:3000/api VITE_WS_URL=ws://localhost:3000 VITE_APP_NAME=Stock Ticker ``` ## 测试 ### 后端测试 ```bash cd backend cargo test # 运行所有测试 cargo test --lib # 单元测试 cargo test --test '*' # 集成测试 cargo tarpaulin # 测试覆盖率 (需要安装: cargo install cargo-tarpaulin) cargo bench # 性能基准测试 ``` ### 前端测试 ```bash cd frontend npm run test # 运行测试 npm run test:coverage # 测试覆盖率 npm run test:e2e # 端到端测试 ``` ## 部署指南 ### 生产环境部署 1. **构建应用** ```bash # 构建前端 cd frontend npm run build # 构建后端(发布版本) cd ../backend cargo build --release ``` 2. **配置Nginx** ```nginx server { listen 80; server_name your-domain.com; # 前端静态文件 location / { root /var/www/ticker/frontend/dist; try_files $uri $uri/ /index.html; } # API代理 location /api { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # WebSocket代理 location /socket.io { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 3. **使用Systemd或PM2管理进程** **使用Systemd (推荐):** ```bash # 创建systemd服务文件 sudo nano /etc/systemd/system/ticker-backend.service # 启动服务 sudo systemctl start ticker-backend sudo systemctl enable ticker-backend # 查看状态 sudo systemctl status ticker-backend ``` **或使用PM2:** ```bash # 安装PM2 npm install -g pm2 # 启动Rust二进制文件 pm2 start ./target/release/ticker-backend --name "ticker-api" # 查看状态 pm2 status # 查看日志 pm2 logs ticker-api ``` ## 监控与维护 ### 性能监控 - API响应时间监控 - 数据库查询性能 - 内存和CPU使用率 - WebSocket连接数 ### 日志管理 - 应用日志分级记录 - 错误日志告警 - 访问日志分析 - 性能日志追踪 ### 备份策略 - 数据库定期备份 - 配置文件版本控制 - 代码仓库备份 - 监控数据归档 ## 安全考虑 ### 数据安全 - 密码加密存储 - JWT令牌安全 - API访问频率限制 - 输入数据验证 ### 网络安全 - HTTPS强制使用 - CORS配置 - XSS防护 - SQL注入防护 ## 贡献指南 1. Fork项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 联系方式 - 项目主页: https://github.com/your-username/ticker - 问题反馈: https://github.com/your-username/ticker/issues - 邮箱: your-email@example.com ## 更新日志 ### v1.0.0 (2024-01-01) - 初始版本发布 - 基础股票报价功能 - 用户认证系统 - 实时数据推送 ### v1.1.0 (计划中) - 技术分析功能 - 移动端优化 - 性能提升 - 新增市场支持