1 Star 5 Fork 1

icy8 / drchat-v2.0

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

仿微信聊天

👀 介绍

仿微信模式的即时聊天系统,实现私聊、群聊、一对一视频功能。支持pc、移动端自适应。开源代码仅供学习交流。

✨ 软件架构

  1. Workerman 4.0Laravelphp >= 7.3Vue3+typescriptSocket-io 4.0WebRTC+Coturn
  2. 使用Vue3渐进式框架进行前端渲染,通过typescript实现面向对象编程,使代码变得易读易维护。
  3. 使用Workerman作为即时通讯框架,为Socketio 4.0实现了一套简单的php服务端组件。
  4. 使用Laravel进行接口数据交互,通过migrate命令一键初始化数据库和db:seed命令填充测试数据。
  5. 使用Coturn搭建视频通信的信令服务器,使得公网环境也可以进行视频通信。
  6. 使用WebRTC协议进行建立视频通信的对等连接,实现媒体流的远程播放。

🔨 安装教程

  • 初始化数据库
composer install
php artisan migrate --seed
php artisan websocket start -d
  • 前端部署前修改.env.development.env.production文件,分别是开发、生产环境的接口配置。

  • 后端部署前修改config/chat.php文件,按照注释修改即可。

  • 数据库初始化后会生成两个账号icy8test,密码都是111111

  • 公网中视频通讯需要stun服务器,如何搭建stun服务器?

🎨 测试数据

# 填充测试数据
php artisan db:seed --class=FakeSeeder

数据量:

  • 用户:10000
  • 群组:10000
  • 好友关系:1000
  • 群组关系:1000
  • 私聊记录:10000
  • 群聊记录:10000

💎 功能清单

  1. 聊天

    • 会话列表
    • 创建会话
    • 发送消息
    • 聊天记录
    • 清空会话
    • 视频私聊
      • 自由切换摄像头:pc端手动选择,移动端自动切换前后摄像头。
      • 自由开关摄像头
      • 自由开关麦克风
  2. 用户

    • 用户登录
    • 用户中心
    • 用户注册
    • 修改资料
  3. 好友

    • 请求

      • 发起请求
      • 通过请求
      • 拒绝请求
      • 请求列表
    • 好友列表

    • 添加好友

    • 好友资料

    • 好友备注

  4. 群组

    • 创建群聊
    • 加入群聊
    • 群员列表
    • 退出群聊
    • 修改群名
    • 添加群员

📢 使用说明

  • 视频功能需要浏览器支持Webrtc接口,目前测试移动端的浏览器只有EdgeChromeFirefox能友好运行,PC端基本都支持Webrtc

  • 如果摄像头被占用会导致视频连线失败。

  • 视频功能务必将程序部署在https站点。

  • 用户注册没有做可视化页面,需要自行调用{{host}}/api/passport/register创建用户。

  • 群聊成员全部退出时,群聊依然会存在,那么这个群聊就成为了僵尸群聊,需要优化。

  • 暂时没有做邀请群成员的功能,只能在创建群聊时勾选群成员。

🙋‍♂️添加好友

  • 如果A、B是好友关系,当A删了B:

    • 此时B好友列表中依然有A,但无法发送消息给A。

    • 此时A可以直接添加B为好友,且B不需要再验证。

    • 此时B可以请求添加A为好友,且A需要验证这个请求。

  • 如果同一个人添加了多条好友请求,此时只要其中一条请求通过拒绝则所有的请求状态都变为通过拒绝

👟 路由列表

+--------+----------+---------------------------------------------------+------+-------------------------------------------------------------------+---------------------------------------+
| Domain | Method   | URI                                               | Name | Action                                                            | Middleware                            |
+--------+----------+---------------------------------------------------+------+-------------------------------------------------------------------+---------------------------------------+
|        | POST     | api/chat/conversation/clearUnread/{scene?}        |      | App\Api\Controllers\ChatConversationController@clearUnread        | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/chat/conversation/createConversation/{scene?} |      | App\Api\Controllers\ChatConversationController@createConversation | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/chat/conversation/hintCount                   |      | App\Api\Controllers\ChatConversationController@hintCount          | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/chat/conversation/list                        |      | App\Api\Controllers\ChatConversationController@list               | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/chat/expressions                              |      | App\Api\Controllers\ChatController@expressions                    | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/chat/group/create                             |      | App\Api\Controllers\ChatGroupController@create                    | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/chat/group/exit                               |      | App\Api\Controllers\ChatGroupController@exit                      | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/chat/group/join                               |      | App\Api\Controllers\ChatGroupController@join                      | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/chat/group/list                               |      | App\Api\Controllers\ChatGroupController@list                      | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/chat/group/members                            |      | App\Api\Controllers\ChatGroupController@members                   | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/chat/group/rename                             |      | App\Api\Controllers\ChatGroupController@rename                    | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/chat/records                                  |      | App\Api\Controllers\ChatController@records                        | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/chat/send/{scene?}                            |      | App\Api\Controllers\ChatController@send                           | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/friend/delete                                 |      | App\Api\Controllers\FriendController@delete                       | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/friend/hintCount                              |      | App\Api\Controllers\FriendController@hintCount                    | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/friend/info                                   |      | App\Api\Controllers\FriendController@info                         | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/friend/list                                   |      | App\Api\Controllers\FriendController@list                         | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/friend/preciseSearch                          |      | App\Api\Controllers\FriendController@preciseSearch                | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/friend/remarkName                             |      | App\Api\Controllers\FriendController@remarkName                   | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/friend/request                                |      | App\Api\Controllers\FriendController@request                      | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/friend/request/list                           |      | App\Api\Controllers\FriendController@requestList                  | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/friend/request/{todo}                         |      | App\Api\Controllers\FriendController@toRequest                    | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | POST     | api/passport/login                                |      | App\Api\Controllers\PassportController@login                      | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess:unauth |
|        | POST     | api/passport/register                             |      | App\Api\Controllers\PassportController@register                   | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess:unauth |
|        | POST     | api/user/edit                                     |      | App\Api\Controllers\UserController@edit                           | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
|        | GET|HEAD | api/user/info                                     |      | App\Api\Controllers\UserController@info                           | api                                   |
|        |          |                                                   |      |                                                                   | App\Api\Middleware\TokenAccess        |
+--------+----------+---------------------------------------------------+------+-------------------------------------------------------------------+---------------------------------------+

🚗 TODO

  • 优化视频通话呼叫逻辑

  • 头像修改/上传

  • 移除会话

  • 登录验证码

  • 前端邀请群成员

  • 处理僵尸群聊

  • 设计缓存优化性能

📸 截图

  1. 登录页

登录页

  1. 会话页

会话页

  1. 联系人

联系人

  1. 创建群聊

创建群聊

  1. 添加好友

添加好友

添加好友

  1. 视频聊天

视频聊天

  1. 群成员

群成员

空文件

简介

仿微信模式的即时聊天系统,实现私聊、群聊、一对一视频功能 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/icy8/drchat-v2.0.git
git@gitee.com:icy8/drchat-v2.0.git
icy8
drchat-v2.0
drchat-v2.0
master

搜索帮助