讲师中心 微信公众号
AI工具推荐 视频效率加速

了解如何建立实时聊天

阿枫姑娘_2101

阿枫姑娘_2101

发布时间:2024-10-11 19:07:20

|

1319人浏览过

|

来源于dev.to

转载

了解如何建立实时聊天

在本教程中,我们将指导您使用 superviz 构建实时聊天应用程序。实时聊天是现代 web 应用程序的一项重要功能,它使用户能够即时相互通信。无论您是在构建协作平台、客户支持工具还是社交网站,添加实时聊天都可以增强用户交互和参与度。

我们将演示如何设置一个简单的聊天界面,参与者可以在其中实时发送和接收消息。在本教程结束时,您将拥有一个功能齐全的聊天应用程序,您可以扩展和自定义该应用程序以满足您的特定需求。

让我们开始吧!


先决条件

要学习本教程,您将需要一个 superviz 帐户和一个开发者令牌。如果您已经拥有帐户和开发者令牌,则可以继续下一步。

创建一个帐户

要创建帐户,请访问 https://dashboard.superviz.com/register 并使用 google 或电子邮件/密码创建帐户。请务必注意,使用电子邮件/密码时,您将收到一个确认链接,您需要点击该链接来验证您的帐户。

检索开发者令牌

要使用 sdk,您需要提供开发者令牌,因为此令牌对于将 sdk 请求与您的帐户关联起来至关重要。您可以从仪表板检索开发和生产 superviz 令牌..

复制并保存开发者令牌,因为您在本教程的后续步骤中将需要它。


第 1 步:设置您的 react 应用程序

首先,您需要建立一个新的 react 项目,我们将在其中集成 superviz 进行实时通信。

1. 创建一个新的react项目

首先,使用 create react app with typescript 创建一个新的 react 应用程序。

npm create vite@latest realtime-chat -- --template react-ts
cd realtime-chat

2.安装所需的库

接下来,为我们的项目安装必要的库:

npm install @superviz/sdk uuid react-icons

  • @superviz/sdk: 用于集成实时通信功能。
  • uuid: 用于生成唯一标识符的库,可用于创建唯一的参与者 id。
  • react-icons: 用于在 react 应用程序中包含图标的库,此处用于发送按钮图标。

3. 配置顺风

在本教程中,我们将使用 tailwind css 框架。首先,安装 tailwind 软件包。

npm install -d tailwindcss postcss autoprefixer
npx tailwindcss init -p

然后我们需要配置模板路径。在项目根目录中打开 tailwind.config.js 并插入以下代码。

/** @type {import('tailwindcss').config} */ 
export default { 
content: [ 
"./index.html", 
"./src/**/*.{js,ts,jsx,tsx}", 
], 
theme: { 
extend: {}, 
}, 
plugins: [], 
}

然后我们需要将 tailwind 指令添加到全局 css 文件中。 (src/index.css)

@tailwind base;
@tailwind components;
@tailwind utilities;

4. 设置环境变量

在项目根目录中创建一个 .env 文件并添加 superviz 开发人员密钥。此密钥将用于通过 superviz 服务验证您的应用程序。

vite_superviz_api_key=your_superviz_developer_key


第 2 步:实现主应用程序

在这一步中,我们将实现主要应用程序逻辑来初始化 superviz 并处理实时聊天消息。

1. 实现app组件

打开 src/app.tsx 并使用 superviz 设置主应用程序组件来管理聊天功能。

import  { v4 as generateid }  from  'uuid';
import  { usecallback, useeffect, usestate, useref }  from  "react";
import  supervizroom,  {  realtime,  realtimecomponentevent,  realtimemessage  }  from  '@superviz/sdk';
import  {  iomdsend  }  from  "react-icons/io";

说明:

Git Pro
Git Pro

Git高级操作:smart-commit、rebase、bisect、worktree、reflog、冲突解决、子模块、PR流程

下载
  • 导入: 从 react、superviz、uuid 和 react icons 导入必要的组件,用于管理状态、初始化 superviz 和渲染聊天界面。

2. 定义常量

定义 api 密钥、房间 id 和消息类型的常量。

const apikey = import.meta.env.vite_superviz_api_key as string; 
const room_id = 'realtime-chat'; 

type message = realtimemessage & { 
    data: { 
        participantname: string; 
        message: string; 
    } 
}

说明:

  • apikey: 从环境变量中检索 superviz api 密钥。
  • room_id: 定义 superviz 会话的房间 id。
  • 消息: 扩展 realtimemessage 以包含参与者姓名和消息内容的类型。

3. 创建应用程序组件

设置主 app 组件并初始化状态变量和引用。

export default function app() { 
    const participant = useref({ 
        id: generateid(), 
        name: 'participant-name', 
    }); 
    const channel = useref<any | null>(null); 
    const [initialized, setinitialized] = usestate(false); 
    const [message, setmessage] = usestate(''); 
    const [messages, setmessages] = usestate<message[]>([]);

说明:

  • 参与者: 使用 useref 存储当前参与者的 id 和名称。
  • 频道: 存储对实时通信频道的引用。
  • 已初始化: 跟踪 superviz 是否已初始化。
  • 消息&消息:管理当前输入的消息和聊天消息列表。

4. 初始化superviz

创建一个函数来初始化 superviz 并设置实时消息处理。

const initialize = usecallback(async () => { 
    if (initialized) return; 

    const superviz = await supervizroom(apikey, { 
        roomid: room_id, 
        participant: participant.current, 
        group: { 
            id: 'realtime-chat', 
            name: 'realtime-chat', 
        }, 
    }); 

    const realtime = new realtime(); 
    superviz.addcomponent(realtime); 
    setinitialized(true); 

    realtime.subscribe(realtimecomponentevent.realtime_state_changed, () => { 
        channel.current = realtime.connect('message-topic'); 

        channel.current.subscribe('message', (data: message) => { 
            setmessages((prev) => [...prev, data].sort((a, b) => a.timestamp - b.timestamp));
        }); 
    }); 
}, [initialized]);

说明:

  • initialize: 初始化 superviz,设置实时组件,订阅消息主题。
  • 实时: 处理聊天的实时通信。
  • channel.current: 存储与“消息主题”通道的连接,消息在该通道中发布和订阅。

5. 处理发送消息

创建一个向聊天发送消息的函数。

const sendmessage = usecallback(() => { 
    if (!channel.current) return; 

    channel.current.publish('message', { 
        message, 
        participantname: participant.current!.name, 
    }); 

    setmessage(''); 
}, [message]);

说明:

  • sendmessage: 将当前消息发布到“message-topic”频道并重置消息输入。

6.使用effect hook进行初始化

使用 useeffect 钩子在组件挂载时触发初始化函数。

useeffect(()  =>  {
  initialize();
},  [initialize]);

说明:

  • useeffect: 组件挂载时调用一次初始化函数,设置 superviz 环境和实时聊天。

第三步:渲染聊天界面

最后返回用于渲染聊天界面的jsx结构。

return ( 
    <div classname='w-full h-full bg-gray-200 flex items-center justify-center flex-col'>
        <header classname='w-full p-5 bg-purple-400 flex items-center justify-between'> 
            <h1 classname='text-white text-2xl font-bold'>realtime chat</h1> 
        </header> 
        <main classname='flex-1 flex w-full flex-col overflow-hidden'> 
            <div classname='flex-1 bg-gray-300 w-full p-2'> 
                { 
                    messages.map((message) => ( 
                        <div classname={`${message.participantid === participant.current!.id ? 'justify-end' : 'justify-start'} w-full flex mb-2`}> 
                            <div classname={`${message.participantid === participant.current!.id ? 'bg-purple-200' : 'bg-blue-300'} text-black p-2 rounded-lg max-w-xs`}> 
                                <div classname={`${message.participantid === participant.current!.id ? 'text-right' : 'text-left'} text-xs text-gray-500`}>
                                    {message.participantid === participant.current!.id ? 'you' : message.data.participantname} 
                                </div> 
                                {message.data.message} 
                            </div> 
                        </div> )) } 
                    </div> 
                    <div classname='p-2 flex items-center justify-between gap-2 w-full'> 
                        <input 
                            type="text" 
                            placeholder="type your message..." 
                            classname="flex-1 border rounded-full px-4 py-2 focus:outline-none" 
                            value={message} 
                            onchange={(e) => setmessage(e.target.value)} 
                        /> 
                        <button 
                            classname='bg-purple-400 text-white px-4 py-2 rounded-full disabled:opacity-50' 
                            onclick={sendmessage} 
                            disabled={!message || !channel.current} 
                        > 
                            <iomdsend /> 
                        </button> 
                    </div> 
                </main> 
            </div> 
        )

说明:

  • 聊天界面: 显示聊天消息和带有发送按钮的输入字段。根据消息是由当前参与者还是其他人发送,消息的样式有所不同。

第 4 步:了解项目结构

以下是项目结构如何支持实时聊天应用程序的快速概述:

  1. app.tsx:
    • 初始化 superviz 并设置实时聊天功能。
    • 处理实时发送和接收聊天消息。
  2. 聊天界面: 以聊天气泡的形式显示消息,并提供输入字段和发送按钮供用户发送消息。
  3. 实时通信: 使用 superviz 管理参与者之间的实时通信。

第 5 步:运行应用程序

1.启动react应用程序

要运行您的应用程序,请在项目目录中使用以下命令:

npm run dev

此命令将启动开发服务器并在默认 web 浏览器中打开您的应用程序。您可以与聊天界面互动,并在其他参与者加入时实时查看消息。

2. 测试应用程序

  • 实时消息传递: 在多个浏览器窗口或选项卡中打开应用程序以模拟多个参与者并验证消息是否实时发送和接收。
  • 协作交互: 通过发送消息并观察所有参与者的聊天更新情况来测试应用程序的响应能力。

概括

在本教程中,我们使用 superviz 构建了一个实时聊天应用程序。我们配置了一个 react 应用程序来处理实时消息传递,使多个用户能够无缝通信。此设置可以扩展和定制,以适应需要实时通信的各种场景。

请随意探索 github 存储库中的完整代码和更多示例以了解更多详细信息。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

312

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

520

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

391

2026.03.13

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

306

2026.06.03

TypeScript Node.js 全栈工程化与Monorepo架构实践
TypeScript Node.js 全栈工程化与Monorepo架构实践

本专题围绕 TypeScript 在 Node.js 全栈开发中的工程化实践展开,系统讲解 Monorepo 架构设计、包管理策略、模块复用机制以及服务端与前端统一类型系统的构建方法。通过真实项目案例,帮助开发者提升大型全栈项目的可维护性与协作效率。

678

2026.06.16

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6204

2023.10.24

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16080

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1183

2024.02.23

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6.1万人学习

CSS教程
CSS教程

共754课时 | 99.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn