Skip to content

laishere/ichat-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

6ead574 · Jun 2, 2024

History

2 Commits
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024
Jun 2, 2024

Repository files navigation

ichat-app

基于 WebRTC 的音视频聊天应用。

ichat-go 后端项目地址

在线体验地址

演示

录屏链接

动图

演示GIF

主要功能

  • 基本用户登录注册
  • 添加联系人
  • 创建群组
  • 聊天:文字、图片
  • 聊天消息撤回
  • 音视频通话:双人、多人;摄像头、麦克风、共享屏幕

架构

  • React 框架
  • Redux 状态管理
  • React-Router 处理简单的路由
  • antd UI 组件
  • axios 处理 api 请求
  • 业务逻辑

目录结构

- 说明
src/ 源代码目录
src/assets 资源文件
src/components 可复用组件
src/icons 简单地 SVG 图标封装
src/lib/ 主要业务逻辑目录
src/pages 页面相关逻辑
src/App.tsx App 组件模块,延迟加载
src/main.tsx 入口组件
src/routes.tsx 页面路由

主要业务逻辑

业务状态

目录: src/lib/store

  • 用户信息状态: users.ts 负责用户信息获取、查询
  • 联系人状态: contacts.ts 负责联系人信息加载、插入、查询,维护当前选中的联系人
  • 消息状态: messages.ts
    • 负责聊天消息同步:历史消息加载、实时通知消息同步、实时通知会话重建后丢失消息同步。
    • 消息查询
    • 消息发送
    • 消息图片延迟上传
    • 消息撤回
  • StoreProvider: StoreProvder.tsx 负责维护、提供业务状态实例
  • 其它 群组状态: groups.ts 设置状态: settings.ts

实时通知

目录: src/lib/notification

  • 通知客户端: client.ts
    • ws 会话建立、维护
    • ws 消息接收处理
    • 心跳
    • 通知事件注册和分发
  • 通知消费者: consumers.tsx
    • 默认消费者:新消息、新联系人、新联系人请求
    • 同步消费者:监听会话建立,根据建立的会话 id 决定是否主动同步丢失的消息、联系人、联系人请求
  • 通知 hook: hook.ts
    • 当前只有一个 hook: useNotificationState,方便监听通知状态变化
  • NotificationProvider: index.tsx
    • 提供 notification client
    • 根据登录用户变化维护 client 连接

通话

目录: src/lib/call

  • 信令会话: signaling.ts
    • ws 会话建立、维护
    • ws 消息接收处理
    • ws 消息发送接口
    • 心跳
  • WebRTC 会话: session.ts
    • 为指定用户建立 WebRTC P2P 连接会话
    • SDP 协商
    • ICE Candidate 交换
    • 媒体流变更同步
    • 监听对方媒体流变化
  • 通话客户端: client.ts
    • 通话加入
    • 信令会话初始化
    • 信令心跳
    • 信令消息处理
    • 通话状态更新
    • 通话成员状态更新、WebRTC 会话维护
    • 本地媒体流维护
    • 回调:通话开始、结束、成员状态更新

开发

  1. 启动后端
  2. 初始化npm install
  3. 启动开发npm run dev

打包

docker build . -t ichat-app:version

部署

  1. 复制 docker/deploy 目录到目标机器
  2. 进入该目录
  3. 复制config.yml.templateconfig.yml,按需修改里面的参数
  4. 使用 docker compose 部署:
docker compose up --pull always -d

注:config.yml 是后端配置文件,init.sql 是后端数据库表结构初始化定义,后端可能更改,可以到后端仓库复制最新的文件。 部署使用的是已经打包好的前后端镜像,也可以自己打包

其它注意事项

WebRTC 要求使用安全域名才能开启摄像头等媒体捕获。

  1. 本地使用 localhost 域名
  2. 配置服务器的 https 环境,前端镜像的 nginx 不包含 https 配置,可以加一层专门负责 https 的 nginx 代理服务器,注意配置 ws 代理(参考 docker/nginx/app.conf.template)
  3. 打开chrome://flags/#unsafely-treat-insecure-origin-as-secure,强制 Chrome 信任目标域名,注意保存并重启

About

基于WebRTC和React的音视频聊天前端

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages