了解如何建立实时聊天
哈喽!今天心血来潮给大家带来了《了解如何建立实时聊天》,想必大家应该对文章都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习文章,千万别错过这篇文章~希望能帮助到你!

在本教程中,我们将指导您使用 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";
说明:
- 导入: 从 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 步:了解项目结构
以下是项目结构如何支持实时聊天应用程序的快速概述:
- app.tsx:
- 初始化 superviz 并设置实时聊天功能。
- 处理实时发送和接收聊天消息。
- 聊天界面: 以聊天气泡的形式显示消息,并提供输入字段和发送按钮供用户发送消息。
- 实时通信: 使用 superviz 管理参与者之间的实时通信。
第 5 步:运行应用程序
1.启动react应用程序
要运行您的应用程序,请在项目目录中使用以下命令:
npm run dev
此命令将启动开发服务器并在默认 web 浏览器中打开您的应用程序。您可以与聊天界面互动,并在其他参与者加入时实时查看消息。
2. 测试应用程序
- 实时消息传递: 在多个浏览器窗口或选项卡中打开应用程序以模拟多个参与者并验证消息是否实时发送和接收。
- 协作交互: 通过发送消息并观察所有参与者的聊天更新情况来测试应用程序的响应能力。
概括
在本教程中,我们使用 superviz 构建了一个实时聊天应用程序。我们配置了一个 react 应用程序来处理实时消息传递,使多个用户能够无缝通信。此设置可以扩展和定制,以适应需要实时通信的各种场景。
请随意探索 github 存储库中的完整代码和更多示例以了解更多详细信息。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《了解如何建立实时聊天》文章吧,也可关注golang学习网公众号了解相关技术文章。
宋紫薇确认已从理想汽车离职,希望去探索AI智能硬件赛道
- 上一篇
- 宋紫薇确认已从理想汽车离职,希望去探索AI智能硬件赛道
- 下一篇
- (更新:陆续恢复正常)上交所交易系统出现成交确认缓慢异常,正在就相关原因进行排查
-
- 文章 · 前端 | 11分钟前 |
- Flex布局order和align-self实战技巧
- 274浏览 收藏
-
- 文章 · 前端 | 19分钟前 |
- CSS设置元素宽高方法详解
- 359浏览 收藏
-
- 文章 · 前端 | 26分钟前 |
- JavaScript宏任务与CPU计算解析
- 342浏览 收藏
-
- 文章 · 前端 | 29分钟前 |
- float布局技巧与应用解析
- 385浏览 收藏
-
- 文章 · 前端 | 30分钟前 | JavaScript模块化 require CommonJS ES6模块 import/export
- JavaScript模块化发展:CommonJS到ES6全解析
- 192浏览 收藏
-
- 文章 · 前端 | 33分钟前 |
- jQueryUI是什么?功能与使用详解
- 360浏览 收藏
-
- 文章 · 前端 | 36分钟前 |
- 搭建JavaScript框架脚手架工具全攻略
- 149浏览 收藏
-
- 文章 · 前端 | 44分钟前 | JavaScript Bootstrap 响应式设计 CSS框架 Tab切换布局
- CSS实现Tab切换布局教程
- 477浏览 收藏
-
- 文章 · 前端 | 44分钟前 |
- 并发控制:限制异步请求数量方法
- 313浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3179次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3390次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3419次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4525次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3799次使用
-
- JavaScript函数定义及示例详解
- 2025-05-11 502浏览
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览

