## chat-room
### 说明
本项目灵感来自交大x字节跳动的公开课,样式参考其`demo`[^1],但本项目采用`React`[^2]所写,UI组件使用`Antd`[^3]
本项目实现的功能有:
- [x] 用户登录
- [x] 用户注册
- [x] 单人聊天
- [x] 多人聊天
- [x] 表情发送
- [x] 文件传输
- [x] 发送语音
- [x] 视频通话
本项目采用的技术有:
- [x] `React & Antd`
- 开发前端界面
- [x] `Electron`
- 打包应用程序,本地测试不适用于https,因为证书不被信任
- [x] `nodejs & socket.io & express`
- 后端逻辑处理
- [x] `WebRTC`
- 语音聊天,音视频通话
- [x] `sqlite3`
- 数据库管理,用户注册登录
### 如何测试本项目
本项目测试所需要的条件根据不同的功能有所不同,主要是因为局域网中视频通话需要使用https,下面进行简单的说明,`不保证`按照本说明便可以正常运行该项目
简单测试,请直接运行安装包,安装该应用程序,然后进入server下运行
```bash
yarn install
yarn start
```
#### 运行于http环境
> 在该条件下,可以运行绝大多数的功能,除发送语音&视频通话
>
> <span style="color: red">也可以使用[安装包](https://github.com/junhaideng/chat-room/releases)进行安装,服务端操作同下</span>
1. 进入到客户端目录下(含`package.json`),执行下面的操作
```bash
# 建议使用yarn
yarn install --production # 如需打包,运行yarn install
yarn start
```
这个时候,项目应该会在如下网址运行
<img src="images/frontend_1.png" style="width:500px;display:block; float:left" width=400>
2. 直接在网页中打开,效果如下
<img src="images/frontend_2.png" style="width:300px;display:block; float:left" width=500>
3. 执行到上面的步骤之后,需要到server目录下执行服务端代码
```bash
yarn install
yarn start
```
运行完之后,控制台会打印出对应的端口号
<img src="images/backend_1.png" style="width:250px;display:block; float:left" width=500>
此时可以访问`http://localhost:3001`进行确认服务端是否运行正常,如果页面中出现`access success`,说明可以访问,服务端正常运行
4. 回到第2步,登录进入,如果没有账号密码,可以先注册一个,这里提供几个测试用的账号密码,为了看到效果,可以同时登录多个账号(同一房间)
| 账号 | 密码 |
| ---- | ---- |
| a | a |
| b | b |
| c | c |
5. 在聊天成员中选择任意一个,便可以发送信息,对方收到对应信息,如果对方当前聊天对象不是发送对象,那么便会出现红点进行提示
> 选中一个,才能发送消息~
该条件下只能发送文件,文本信息以及表情
> 在`http://localhost:3000`(非其他局域网ip地址访问网页)条件下,可以使用语音视频功能
<div style="width:100%;display:flex;flex-flow:row wrap; align-content:space-between; padding:10px"}>
<img src="images/frontend_3.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_4.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_5.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_6.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_7.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_8.png" style="width:300px;margin:10px" width=500>
</div>
#### 运行于https环境
> 该环境下支持使用所有功能,视频聊天需要使用多个设备(本地两个网页也可)进行测试,在这里说明局域网配置
1. 进入server目录,执行下面命令
```bash
yarn install
yarn https
```
2. 使用第二个设备连接到本地电脑的`热点`,打开cmd,使用`ipconfig`查看所有ip地址,使用`https://{ip}:3000`访问(<span style="color:red">一定要加https</span>),选择能够访问到前端的ip地址,假设为ip,打开`.env.development`,设置为`REACT_APP_SOCKET_URL=https://{ip}:3001`,使用上面`一样的命令`运行客户端
3. 在第二台设备中打开网页`https://{ip}:3000`(之前界面不要关闭,因为自己签发的https证书不受信任,关闭之后可能不能连接到服务端),然后登录进去;本地亦是如此
进入客户端或者服务端界面的时候都有可能出现下面的情况,请选择`advanced`中的`continue`
<img src="images/frontend_9.png" style="width:300px;margin:10px" width=500>
4. 建议在本地端发送数据给第二台设备(视频不太稳定)
<div style="width:100%;display:flex;flex-flow:row wrap; align-content:space-between; padding:10px"}>
<img src="images/frontend_10.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_11.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_12.png" style="width:300px;margin:10px" width=500>
<img src="images/frontend_13.png" style="width:300px;margin:10px" width=500>
</div>
### 演示效果
<img src="./images/demo_1.gif" width=500>
<img src="./images/demo_2.gif" width=500>
<img src="./images/demo_3.gif" width=500>
## 简单讲解:
作为一个聊天程序,用户之间需要进行聊天,一个是写死对方的地址,然后直接发送消息,另一个就是通过第三方进行消息的中转,我们只需要知道服务端的地址即可,当然,我们也可以通过服务端知道了对方的地址,然后直接进行通信,本项目采用的是`服务端中转`
<img src="./images/chatroom_1.png" width=500>
文本,文件,语音只不过发送的数据类型不同罢了,`socket.io`支持二进制文件的发送,那么由它转发即可,不过注意设置好缓冲大小,否则容易断开连接
音视频通话使用`WebRTC`[^4],用户A先请求用户B可否进行通话,如果可以,然后在使用`RTCPeerConnection`进行连接,将`stream`加到对应的`video`元素上即可,实际上本项目采用的有两次下面的过程,一次是为了确认用户是否同意,另一次才是实际连接的建立
<img src="./images/chatroom_2.png" width=400>
### docker 运行
在client 目录下
```bash
docker build -t=chat-client .
docker run -p 3000:3000 --name client chat-client
```
在server 目录下
```bash
docker build -t=chat-server .
docker run -p 3001:3001 --name server chat-server
```
创建成功之后,可在本地进行预览
### 局限
- 本项目数据不进行持久性保存,实时聊天通话,所有消息仅保存在内存中,当然可以实现持久化保存,但目前本项目暂不实现
- 功能较少,用户配置无
- 视频聊天的时候存在一定的回声
- ...
[^1]:https://github.com/sjtu-course/ppt/tree/main/day2-2/src_code/chat-demo
[^2]:https://reactjs.org/
[^3]:https://ant-design.gitee.io/components/overview/
[^4]: https://github.com/webrtc
没有合适的资源?快使用搜索试试~ 我知道了~
毕设 基于React&Nodejs搭建实时聊天系统.zip
共101个文件
js:36个
png:28个
css:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 59 浏览量
2023-10-24
12:04:18
上传
评论
收藏 27.66MB ZIP 举报
温馨提示
matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行!
资源推荐
资源详情
资源评论
收起资源包目录
毕设 基于React&Nodejs搭建实时聊天系统.zip (101个子文件)
MessageContainer.css 5KB
ChatRoom.css 2KB
MessageEditor.css 2KB
MemberList.css 1KB
Video.css 798B
FilePreviewIcon.css 627B
Emoji.css 309B
Login.css 228B
App.css 44B
index.css 43B
chat.db 12KB
.env.development 284B
Dockerfile 176B
Dockerfile 176B
.env 73B
demo_3.gif 18.8MB
demo_2.gif 4.41MB
demo_1.gif 2.68MB
index.html 2KB
favicon256.ico 11KB
favicon.ico 4KB
Video.js 17KB
MessageEditor.js 16KB
ChatRoom.js 9KB
https.js 9KB
http.js 9KB
Login.js 8KB
MessageContainer.js 6KB
MemberList.js 3KB
message.js 2KB
FilePreviewIcon.js 2KB
main.js 2KB
Emoji.js 2KB
electron.js 2KB
index.js 2KB
request.js 1KB
actions.js 1KB
sqlite3.js 1KB
client.js 930B
socket-types.js 919B
App.js 887B
tools.js 882B
emoji.js 880B
index.js 785B
socket-types.js 741B
socket.js 657B
get_ip.js 500B
action-types.js 487B
log.js 428B
reportWebVitals.js 402B
avatar.js 291B
insert.js 289B
init.js 256B
App.test.js 249B
setupTests.js 240B
response.js 215B
request-types.js 90B
package-lock.json 686KB
package.json 2KB
manifest.json 382B
package.json 345B
yarn.lock 559KB
yarn.lock 51KB
README.md 7KB
ss.md 37B
key.pem 2KB
cert.pem 1KB
frontend_13.png 806KB
file_transmission.png 124KB
frontend_1.png 109KB
audio_chat.png 108KB
frontend_4.png 103KB
frontend_5.png 97KB
frontend_6.png 97KB
frontend_7.png 95KB
frontend_8.png 84KB
frontend_9.png 79KB
frontend_12.png 59KB
frontend_10.png 55KB
frontend_11.png 53KB
chatroom_2.png 48KB
frontend_3.png 44KB
chatroom_1.png 19KB
frontend_2.png 16KB
backend_1.png 12KB
logo.png 8KB
logo.png 8KB
qlogo_1.png 6KB
qlogo_1.png 6KB
qlogo_3.png 6KB
qlogo_3.png 6KB
qlogo_4.png 5KB
qlogo_4.png 5KB
qlogo_2.png 5KB
qlogo_2.png 5KB
.env.production 288B
logo.svg 3KB
download.svg 1KB
voice-right.svg 951B
voice-left.svg 942B
共 101 条
- 1
- 2
资源评论
天天501
- 粉丝: 606
- 资源: 4665
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功