创建一个基于Node.js的实时聊天应用

news2024/11/19 17:27:18

在当今数字化社会,实时通讯已成为人们生活中不可或缺的一部分。无论是在社交媒体平台上与朋友交流,还是在工作场合中与同事协作,实时聊天应用都扮演着重要角色。与此同时,Node.js作为一种流行的后端技术,为开发者提供了强大的工具和灵活的环境,使得创建实时聊天应用变得轻而易举。

在本篇博客中,我们将探讨如何利用Node.js构建一个基于WebSocket协议的实时聊天应用。WebSocket是一种在单个TCP连接上提供全双工通信的协议,适用于需要实时性的应用场景,比如在线游戏、实时监控以及聊天应用。

首先,我们需要创建一个基本的Node.js应用,并安装一些必要的依赖。在命令行中运行以下命令:

mkdir real-time-chat
cd real-time-chat
npm init -y
npm install express ws

上面的命令中,我们创建了一个名为real-time-chat的项目,并安装了Express框架和ws模块,分别用于处理HTTP请求和WebSocket连接。

接下来,我们来编写服务器端的代码。在项目根目录下创建一个名为server.js的文件,并添加以下代码:

const express = require('express');
const http = require('http');
const WebSocket = require('ws');

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  ws.on('message', (message) => {
    wss.clients.forEach((client) => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

server.listen(3000, () => {
  console.log('Server started on http://localhost:3000');
});

在上面的代码中,我们创建了一个Express应用,并在3000端口启动了一个HTTP服务器。同时,我们使用WebSocket模块创建了一个WebSocket服务器,并实现了简单的消息广播功能。

现在,我们已经完成了服务器端的搭建。接下来,我们需要创建一个简单的客户端界面来与服务器通信。在项目根目录下创建一个名为index.html的文件,并添加以下代码:

<!DOCTYPE html>
<html>
<head>
  <title>Real Time Chat</title>
</head>
<body>
  <input type="text" id="message" placeholder="Type your message here">
  <button onclick="sendMessage()">Send</button>
  <ul id="chat"></ul>

  <script>
    const socket = new WebSocket('ws://localhost:3000');
    const chat = document.getElementById('chat');

    socket.onmessage = (event) => {
      const li = document.createElement('li');
      li.textContent = event.data;
      chat.appendChild(li);
    };

    function sendMessage() {
      const message = document.getElementById('message').value;
      socket.send(message);
    }
  </script>
</body>
</html>

在上面的代码中,我们创建了一个简单的HTML界面,包括一个文本输入框用于输入消息、一个发送按钮和一个用于显示聊天消息的列表。通过WebSocket与服务器建立连接,并实现了接收和发送消息的功能。

最后,我们启动服务器并在浏览器中打开index.html文件,即可看到实时聊天应用的界面。您可以在同一台机器上打开多个浏览器窗口,模拟多人聊天的场景,体验实时通讯的魅力。

通过本篇博客的介绍,您学会了如何利用Node.js和WebSocket创建一个简单的实时聊天应用。当然,这只是一个入门级的示例,在实际应用中还有很多功能和性能优化的空间。希望本文能对您有所启发,让您深入了解实时通讯技术,不断完善和优化您的应用。

Node.js视频教程请点击:Node.js从基础到项目实践_在线视频教程-CSDN程序员研修院

最后问候亲爱的朋友们,并邀请你们阅读我的(博主简介)全新著作。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1TB! 台湾最新倾斜摄影3DTiles数据分享

之前的文章分享了546GB香港倾斜摄影3DTiles数据&#xff0c;主要是验证倾斜模型3DTiles转换工具的生产效率和数据显示效率&#xff0c;结果对比可以看出无论是数据生产速度以及成果数据显示效率上&#xff0c;都优于其他两种技术路线。最近使用倾斜模型3DTiles工具生产了台湾地…

Spring 手动实现Spring底层机制

目录 一、前言 二、Spring底层整体架构 1.准备工作 : 2.架构分析 : &#xff08;重要&#xff09; 3.环境搭建 &#xff1a; 三、手动实现Spring容器结构 1.自定义注解 : 1.1 Component注解 1.2 Scope注解 2.自定义组件 : 3.自定义用于封装Bean信息的BeanDefinition类&a…

STM32 SPI(基础概念)

文章目录 前言一、SPI通信协议概述二、SPI硬件框图和软件层次三、SPI通信时序四、SPI控制器总结 前言 本篇文章来给大家讲解一个非常重要的通信协议SPI&#xff0c;SPI在MCU和外设之间的通信用的是非常多的&#xff0c;这篇文章将带大家先来学习SPI的一些概念。 一、SPI通信协…

alist修改密码(docker版)

rootarmbian:~# docker exec -it [docker名称] ./alist admin set abcd123456 INFO[2024-02-20 11:06:29] reading config file: data/config.json INFO[2024-02-20 11:06:29] load config from env with prefix: ALIST_ INFO[2024-02-20 11:06:29] init logrus..…

《TCP/IP详解 卷一》第3章 链路层

目录 3.1 引言 3.2 以太网 3.3 全双工 省点 自动协商 流量控制 3.4 网桥和交换机 3.5 WiFi 3.6 PPP协议 3.6.1 PPP协议流程 3.7 环回 3.8 MTU和路径MTU 3.9 隧道基础 3.9.1 GRE 3.9.2 PPTP 3.9.3 L2TP 3.10 与链路层相关的攻击 3.11 总结 3.1 引言 城域网&…

2024年1月京东洗衣机行业数据分析:TOP10品牌销量销额排行榜

鲸参谋监测的京东平台1月份洗衣机市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台显示&#xff0c;今年1月份&#xff0c;京东平台上洗衣机的销量约160万件&#xff0c;环比上个月增长约42%&#xff0c;同比去年下滑7%&#xff1b;销售额约28亿元&#xff0c;环比…

Java零基础 - 三元运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具

下载地址&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…

强大的文本绘图——PlantUML

PlantUML是一款开源工具&#xff0c;它允许用户通过简单的文本描述来创建UML图&#xff08;统一建模语言图&#xff09;。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言&#xff08;DSL&#xff09;&am…

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试,发布到CSDN

效果图 设备树代码 myplatform{compatible "hqyj,myplatform";led1-gpio<&gpioe 10 0>;led2-gpio<&gpiof 10 0>;led3-gpio<&gpioe 8 0>; interrupt-parent <&gpiof>;interrupts<9 0>;reg<0X12345678 …

idea在工具栏中显示快速创建包和类的图标

一、效果图 点击需要创建包或者类的位置&#xff0c;在点击对用的图标就可以快速创建类或者包了。 二、设置 步骤一 View-->Appearance-->Toolbar 步骤二 File-->Settings-->Appearance & Behavior-->Menus and Toolbars-->Main Toolbar-->----…

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…

在Ubuntu系统下搭建TDengine集群

目录 一、Ubuntu虚拟机创建 二、系统相关配置 1、设置系统hostname 2、网络配置及IP规划 3、配置FQDN&#xff08;etc/hosts&#xff09; 4、服务端口设置 三、TDengine server安装 1、服务安装 2、修改配置 3、启动taosd 4、服务卸载 四、客户端安装 1、client安…

密评技术要求实施详解:每一步都关键

密评简介 密评定义&#xff1a;全称商用密码应用安全性评估, 是对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估的活动。 评测依据&#xff1a;GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》。 密评对象&…

(done) 什么是特征值和特征向量?如何求特征值的特征向量 ?如何判断一个矩阵能否相似对角化?

什么是齐次方程&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频&#xff1a;https://www.bilibili.com/video/BV…

【MATLAB】CEEMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMD_MFE_SVM_LSTM神经网络时序预测算法是一种结合了多种先进技术的复杂预测方法&#xff0c;旨在提高时序预测的准确性和稳定性。下面是对该算法的详细介绍&#xff1a; CEEMD&#xff…

基于Java+SpringBoot+Vue前后端分离婚纱影楼管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容&#xff1a;SpringBoot、Vue、SSM、HLM…

【监督学习之决策树和随机森林】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱决策树&#xff08;Decision Tree&#xff09;随机森林&#xff08;Random Forest&#xff09; 简述概要 了解决策树和随机森林 知识图谱 决策树和随机森林都是机器学习中常用的算法&#xff0c;它们在处…

.net core wbeapi 关于swagger的配置

当创建好一个webapi之后&#xff0c;在Program.cs中注释掉原本的AddSwaggerGen&#xff0c;修改为如下配置 Program.cs //builder.Services.AddSwaggerGen();builder.Services.AddSwaggerGen(options >{options.SwaggerDoc("v1", new OpenApiInfo{Version "…

利用docker一键部署LLaMa到自己的Linux服务器,有无GPU都行、可以指定GPU数量、支持界面对话和API调用,离线本地化部署包含模型权重合并

利用docker一键部署LLaMa到自己的Linux服务器,有无GPU都行、可以指定GPU数量、支持界面对话和API调用,离线本地化部署包含模型权重合并。两种方式实现支持界面对话和API调用,一是通过搭建text-generation-webui。二是通过llamma.cpp转换模型为转换为 GGUF 格式,使用 quanti…