Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

仿微信聊天

👀 介绍

仿微信模式的即时聊天系统,实现私聊、群聊、一对一视频功能。支持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. 群成员

群成员

About

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

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages