用Swoole+React 實現的聊天室

先後端分離的項目,使用 Swoole+React 實現的聊天室,整個項目的框架結構能夠進行參考,前端 react+react-redux+react-router+react-ant 等等,後臺使用 easySwoole,自行實現中間件(數據封裝,token 驗證,簽名驗證), 認真看代碼能夠學到不少哦,?!php

1. 項目連接

 

1.1 swoole(請 star)

https://github.com/LaravelChen/swoole_chat...前端

 

1.2 react(請 star)

https://github.com/LaravelChen/React-Small...react

 

1.3 api 框架 (基本需求已所有實現,能夠本身試試?)

https://github.com/LaravelChen/swoole_api_...
性能展現 (強,強,強)git

 

2. 簡介

本人爲了更加便利的開發,自行實現了中間件,封裝了請求數據體,利用 jwt 實現 api 的 token 驗證,集成了 Laravel 的 ORM,再次封裝了一套適合 api 編寫流程的數據請求流程,具體能夠看 App/Base 目錄下的 Model 類,具體開發步驟詳見代碼便可。github

 

3. 主要實現

  • 登陸註冊,驗證碼發送(若是須要測試,能夠結合前端 react 將驗證碼打印出來便可)
  • 公共聊天室(一旦用戶登陸,用戶列表即會增長,該用戶能夠進行加好友操做)
  • 消息推送(能夠利用 swoole 的異步進程實現)
  • 私聊室 (加無缺友便可進行私聊)
  • 其他功能能夠添加......

 

4. 安裝

 

4.1 後臺安裝

這裏只是後臺邏輯,前端的對應項目請移步到: https://github.com/LaravelChen/React-Small...數據庫

php server start

由於 swoole 常駐內存,因此一旦修改代碼,須要重啓。npm

 

4.2 前端安裝

npm install
npm run start

 

5. 項目效果

5.1 暢聊室redux

5.2 私聊室後端

 

 

 

此外,還有其餘的加好友,消息推送等效果不演示了,能夠自行下載安裝使用,效果很好!api

6.postman 接口參考

https://www.getpostman.com/collections/7f9...

 

7. 數據表結構

1. 數據庫名

swoole_framework

chat_content 表

 1 CREATE TABLE `chat_content` (
 2   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
 3   `user_id` int(11) NOT NULL COMMENT '用戶id',
 4   `to_user_id` int(11) DEFAULT NULL COMMENT '接收方',
 5   `action` enum('PUBLIC','PRIVATE') NOT NULL DEFAULT 'PUBLIC' COMMENT '操做樣式',
 6   `chat_content` varchar(255) NOT NULL DEFAULT '' COMMENT '聊天記錄',
 7   `created_at` datetime DEFAULT NULL COMMENT '建立時間',
 8   `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
 9   `deleted_at` timestamp NULL DEFAULT NULL COMMENT '刪除時間',
10   PRIMARY KEY (`id`),
11   KEY `user_id` (`user_id`,`to_user_id`)
12 ) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4;

 

friends 表

 1 CREATE TABLE `friends` (
 2   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 3   `user_id` int(11) DEFAULT NULL COMMENT '用戶id',
 4   `to_user_id` int(11) DEFAULT NULL COMMENT '好友id',
 5   `created_at` timestamp NULL DEFAULT NULL,
 6   `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 7   `deleted_at` timestamp NULL DEFAULT NULL,
 8   PRIMARY KEY (`id`)
 9 ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
10  

 

notification 表

 1 CREATE TABLE `notification` (
 2   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 3   `type` enum('ADDUSER') NOT NULL DEFAULT 'ADDUSER' COMMENT '類型',
 4   `action` enum('RECEIVE','REFUSE','DEFAULT') DEFAULT 'DEFAULT' COMMENT '當前的種類',
 5   `user_id` int(11) NOT NULL COMMENT '發送方id',
 6   `message` varchar(255) DEFAULT NULL COMMENT '信息',
 7   `to_user_id` int(11) NOT NULL COMMENT '接送方id',
 8   `is_read` enum('YES','NO') NOT NULL DEFAULT 'NO' COMMENT '是否已讀',
 9   `created_at` datetime NOT NULL COMMENT '建立時間',
10   `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
11   `deleted_at` timestamp NULL DEFAULT NULL COMMENT '刪除時間',
12   PRIMARY KEY (`id`),
13   KEY `type` (`type`,`user_id`,`to_user_id`)
14 ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4;

 

users 表

 1 CREATE TABLE `users` (
 2   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
 3   `phone` varchar(13) NOT NULL DEFAULT '' COMMENT '手機號',
 4   `name` varchar(55) NOT NULL DEFAULT '' COMMENT '姓名',
 5   `email` varchar(30) NOT NULL DEFAULT '' COMMENT '郵箱地址',
 6   `avatar` varchar(255) DEFAULT NULL COMMENT '頭像地址',
 7   `password` varchar(100) NOT NULL DEFAULT '' COMMENT '密碼',
 8   `created_at` datetime DEFAULT NULL COMMENT '建立時間',
 9   `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
10   `deleted_at` timestamp NULL DEFAULT NULL COMMENT ' 刪除時間',
11   PRIMARY KEY (`id`),
12   UNIQUE KEY `phone` (`phone`),
13   UNIQUE KEY `email` (`email`)
14 ) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8;
相關文章
相關標籤/搜索