# 盒子IM **Repository Path**: futures-cloud/box-im ## Basic Information - **Project Name**: 盒子IM - **Description**: 盒子IM是一个仿微信的聊天工具。后端采用springboot+netty实现,web端使用vue,移动端使用uniapp,支持私聊、群聊、离线消息、发送图片、文件、语音、emoji表情、视频聊天等功能。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.boxim.online - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1188 - **Created**: 2024-11-19 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### **Yakka** ![MIT协议](https://img.shields.io/badge/license-MIT-red) 1. Yakka是一个仿微信实现的网页版聊天软件,不依赖任何第三方收费组件。 2. 支持私聊、群聊、离线消息、发送语音、图片、文件、已读未读、群@等功能 3. 支持单人、多人音视频通话(基于原生webrtc实现,需要ssl证书) 4. 后端采用springboot+netty实现,网页端使用vue 5. 服务器支持集群化部署,具有良好的横向扩展能力 #### 近期更新 发布3.0版本: - 框架和组件版本全面升级: jdk17、springboot3.3、node18等 - 部分界面,功能、性能优化 #### 项目结构 | 模块 | 功能 | |-------------|----------------------------------| | yakka-platform | 业务平台服务,负责处理来自用户的业务请求(http) | | yakka-server | 消息推送服务,不依赖业务,负责将消息推送给用户(ws) | | yakka-client | 消息推送sdk, 其他服务可集成此sdk与yakka-server通信 | | yakka-common | 公共包,后端服务均依赖此包 | | yakka | 前端页面 | #### 消息推送方案 当消息的发送者和接收者连的不是同一个server时,消息是无法直接推送的,所以我们设计出了能够支持跨节点推送的方案: ![输入图片说明](%E6%88%AA%E5%9B%BE/%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81%E9%9B%86%E7%BE%A4%E5%8C%96.jpg) - 利用了redis的list数据实现消息推送,其中key为im:unread:${serverid},每个key的数据可以看做一个queue,每个yakka-server根据自身的id只消费属于自己的queue - redis记录了每个用户的websocket连接的是哪个yakka-server,当用户发送消息时,yakka-platform将根据所连接的yakka-server的id,决定将消息推向哪个queue #### 本地启动 1.安装运行环境 - 安装node:v18.19.0 - 安装jdk:17 - 安装maven:3.9.6 - 安装mysql:8.0,账号密码分别为root/root,创建名为im_platform的数据库,运行db/yakka-platfrom.sql脚本 - 安装redis:6.2 - 安装minio:RELEASE.2024-xx,使用默认账号、密码、端口 2.启动后端服务 ``` mvn clean package java -jar ./yakka-platform/target/yakka-platform.jar java -jar ./yakka-server/target/yakka-server.jar ``` 3.启动前端web ``` cd yakka npm install npm run serve ``` 访问 http://localhost:8080