在 React 中使用 WebSockets 构建实时聊天应用程序

实时通信已成为现代 Web 应用程序(尤其是在聊天应用程序中)不可或缺的功能。实时通信提供了一种强大的方法来实现客户端和服务器之间的实时双向通信。在本指南中,我们将逐步讲解如何使用React WebSockets构建实时聊天应用程序。

先决条件

在深入研究之前,请确保您具备以下条件:

• 对 React 有基本的了解。

• 您的机器上安装了 Node.js。

• npm类似或 yarn 的包管理器。

• 熟悉 WebSocket 概念。

步骤 1:设置后端

我们需要一个 WebSocket 服务器来处理实时通信。我们将使用 Node.js 的 ws 包。

1、初始化 Node.js 项目:

mkdir chat-backend

cd chat-backend

npm init -y

2、安装 ws 包:

npm install ws

3、创建 WebSocket 服务器:

// server.js

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {

console.log('Client connected');

ws.on('message', (message) => {

console.log(`Received: ${message}`);

// Broadcast the message to all clients

wss.clients.forEach((client) => {

if (client.readyState === WebSocket.OPEN) {

client.send(message);

}

});

});

ws.on('close', () => {

console.log('Client disconnected');

});

});

console.log('WebSocket server running on ws://localhost:8080');

4、运行服务器:

node server.js

第 2 步:设置 React 前端

1、创建一个新的 React 应用:

npx create-react-app chat-frontend

cd chat-frontend

2、WebSocket安装 WebSocket 的依赖项:

由于将使用浏览器的本机 API,因此不需要额外的依赖项。

步骤3:构建聊天界面

1、创建聊天组件:

// src/components/Chat.js

import React, { useState, useEffect, useRef } from 'react';

const Chat = () => {

const [messages, setMessages] = useState([]);

const [input, setInput] = useState('');

const ws = useRef(null);

useEffect(() => {

ws.current = new WebSocket('ws://localhost:8080');

ws.current.onmessage = (event) => {

setMessages((prev) => [...prev, event.data]);

};

return () => {

ws.current.close();

};

}, []);

const sendMessage = () => {

if (input.trim()) {

ws.current.send(input);

setInput('');

}

};

return (

<div style={{ padding: '20px', maxWidth: '400px', margin: '0 auto', textAlign: 'center' }}>

<h2>Real-Time Chat</h2>

<div

style={{

border: '1px solid #ccc',

borderRadius: '5px',

padding: '10px',

maxHeight: '300px',

overflowY: 'scroll',

}}

>

{messages.map((msg, index) => (

<div key={index} style={{ textAlign: 'left', margin: '5px 0' }}>

{msg}

</div>

))}

</div>

<div style={{ marginTop: '10px' }}>

<input

type="text"

value={input}

onChange={(e) => setInput(e.target.value)}

style={{

padding: '8px',

width: '70%',

marginRight: '5px',

borderRadius: '5px',

border: '1px solid #ccc',

}}

/>

<button

onClick={sendMessage}

style={{

padding: '8px 12px',

borderRadius: '5px',

border: 'none',

backgroundColor: '#007BFF',

color: '#fff',

}}

>

Send

</button>

</div>

</div>

);

};

export default Chat;

2、在您的 App.js 中使用聊天组件:

import React from 'react';

import Chat from './components/Chat';

function App() {

return <Chat />;

}

export default App;

3、启动 React 应用:

npm start

步骤4:测试应用程序

• 在多个选项卡或设备中打开您的 React 应用程序。

• 开始在一个选项卡中输入消息,并实时观察它们出现在所有连接的客户端中!

其他增强功能

为了使应用程序可以投入生产,请考虑

• 为个性化消息添加用户身份验证。

• 集成数据库来存储聊天记录。

• 将 WebSocket 服务器和 React 应用程序部署到 Vercel、Heroku 或 AWS 等平台。

总结

我们利用 WebSockets,使用 React 构建了一个轻量级的实时聊天应用程序。该项目展示了 WebSockets 在动态通信方面的强大功能,它适用于各种应用,例如消息平台、游戏和实时通知。深入了解 WebSocket 协议,进一步增强您的应用程序!

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
Allen_zx17 分钟前
Elpis - 基于 Koa + Vue3 的企业级全栈应用框架
node.js
鹏程1 小时前
局域网下五子棋,html+node.js实现
node.js·html
黄瓜沾糖吃1 小时前
大佬们指点一下倒计时有什么问题吗?
前端·javascript
温轻舟1 小时前
3D词云图
前端·javascript·3d·交互·词云图·温轻舟
浩龙不eMo2 小时前
✅ Lodash 常用函数精选(按用途分类)
前端·javascript
爱分享的程序员2 小时前
前端面试专栏-算法篇:17. 排序算法
前端·javascript·node.js
Jackson_Mseven2 小时前
面试官:useEffect 为什么总背刺?我:闭包、ref 和依赖数组的三角恋
前端·react.js·面试
盛夏绽放2 小时前
接口验证机制在Token认证中的关键作用与优化实践
前端·node.js·有问必答
pe7er3 小时前
使用 Vue 官方脚手架创建项目时遇到 Node 18 报错问题的排查与解决
前端·javascript·vue.js
pe7er3 小时前
使用 types / typings 实现全局 TypeScript 类型定义,无需 import/export
前端·javascript·vue.js