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

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

**先决条件**

在深入研究之前,请确保您已准备好以下事项:

  • 对 React 有基本的了解。
  • 您的机器上安装了 Node.js。
  • 像 npm 或 yarn 这样的包管理器。
  • 熟悉 WebSocket 概念。
  • **步骤 1:设置后端**

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

  • 初始化 Node.js 项目:
  • mkdir chat-backend  
    cd chat-backend  
    npm init -y
  • 安装 ws 包:
  • npm install ws
  • 创建 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');
  • 运行服务器:
  • node server.js

    **步骤 2:设置 React 前端**

  • 创建一个新的 React 应用:
  • npx create-react-app chat-frontend  
    cd chat-frontend
  • 安装 WebSocket 的依赖项:由于将使用浏览器的本机 WebSocket API,因此不需要额外的依赖项。
  • **步骤 3:构建聊天界面**

  • 创建聊天组件:
  • // 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 (
            

    Real-Time Chat

    {messages.map((msg, index) => (
    {msg}
    ))}
    setInput(e.target.value)} style={{ padding: '8px', width: '70%', marginRight: '5px', borderRadius: '5px', border: '1px solid #ccc', }} />
    ); }; export default Chat;
  • 在你的 App.js 中使用聊天组件:
  • import React from 'react';  
    import Chat from './components/Chat';  
    
    function App() {
        return ;  
    }  
    
    export default App;
  • 启动 React 应用程序:
  • npm start

    **步骤 4:测试应用程序**

  • 在多个选项卡或设备中打开你的 React 应用程序。
  • 开始在一个选项卡中输入消息,并观察它们实时出现在所有连接的客户端中!
  • **其他增强功能**

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

  • 为个性化消息添加用户身份验证。
  • 集成数据库来存储聊天历史。
  • 将 WebSocket 服务器和 React 应用程序部署到 Vercel、Heroku 或 AWS 等平台。
  • **结论**

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

    祝你编码愉快!🚀