基于socket.io的web聊天室

article/2025/10/14 1:32:16

基于socket.io的web聊天室

一、 项目介绍

该项目使用node.js作为后端服务器框架,并利用socket.io来实现web聊天室功能。socket.io是由 JavaScript 实现的基于Node.js架构体系的用于实时通信的开源框架,它包括了客户端的 JavaScript 库和 服务器端的 Node.js 服务。

该项目实现多人实时聊天室的功能,浏览器将用户数据和消息发送给服务器,服务器收到后则将用户信息和消息群发给所有浏览器用户。

二、项目功能与代码实现

1.用户登录功能

用户在前端页面填入昵称,并选择头像登录,客户机与服务器建立连接,将用户数据发送给服务器。服务器维护一个用户列表,并查询该昵称是否已存在,并将结果发送给浏览器处理。服务器更新用户列表,并将新登录用户和用户列表广播发送给已连接所有客户端。

客户端登录代码


login.addEventListener('click',function() {username = $("#username").val().trim()if(!username) {alert('用户名不能为空')return}photo = $('#login_photo li.now img').attr('src')socket.emit('login',{
​    	username: username,
​    	photo: photo}) 
})

服务器验证用户登录数据

socket.on('login',data => {let user = users.find(item => item.username === data.username)
​    if(user){socket.emit('loginError',{msg: '该昵称已使用'})}else{users.push(data)socket.emit('loginSuccess',data)
​    }
​    io.emit('userAdd',data)
​    io.emit('userList',users)
})

2.聊天室用户列表更新功能

服务器在用户登录或退出后更新用户数据并广播发送给客户端,客户端则更新聊天室的用户列表并计算现有人数。

服务器广播用户列表

​ io.emit(‘userList’,users)

客户端更新用户列表

socket.on('userList',function(data) {user_list.html('')data.forEach( item => {user_list.append(`<li class="user">div class="photo"><img src="${item.photo}" /></div><div class="name">${item.username}</div></li> `)
})

3.消息发送功能

客户端将消息发送给服务器,服务器收到则将消息广播,客户机更新聊天消息。

客户端发送消息给服务器

messageSendButton.addEventListener('click',function() {var content = contentText.innerTextif(!content) return alert('请输入内容')socket.emit('sendMessage',{msg: content,username: username,photo: photo})
})

服务器收到消息进行广播

 socket.on('sendMessage', data => {io.emit('receiveMessage', data)})

客户端将消息填入聊天信息框

socket.on('receiveMessage', data => {if(data.username === username) {//自己的消息messagebox.innerHtml +=`<div class="mymessage"><img class="photo" src="${data.photo}" /><div class="content"><div class="msg">${data.msg}</div></div></div>`} else {//别人的消息messagebox.innerHtml +=`<div class="othermessage"><img class="photo" src="${data.photo}" /><div class="content"><div class="nickname">${data.username}</div><div class="msg">${data.msg}</div></div></div>`}
})

4.系统消息

当用户登录成功时,服务器广播登录成功消息,客户端在聊天窗口显示某用户进入聊天室。

当用户退出时,服务器广播退出消息,客户端在聊天窗口显示某用户退出聊天室。

三、项目演示

登录界面

在这里插入图片描述

聊天界面
在这里插入图片描述


http://chatgpt.dhexx.cn/article/ClWndyuc.shtml

相关文章

一个轻量级多功能免费开源web聊天室

一个轻量级多功能免费开源web聊天室&#xff0c;轻量级实用功能多而强悍的聊天室系统 版本特点&#xff1a; 支持图文发送,兼容QQ内置,微信内置,pc等浏览器 无需服务端操作,phpmysql高效运行,无需第三方插件 高效极快的运行速度 聊天室bbs推送 多功能聊天室 支持一键粘贴网页图…

web聊天室项目开发过程及重难点整理

目录 一、需求分析二、业务背景1.张三要发消息给李四2.WebSocket实现消息推送流程 三、前后端接口和数据库系统设计1.用户相关的接口2.频道相关接口3.数据库表的设计 四、功能交互实现原理及代码展示1.输入url访问主页2.调用检查登陆状态接口2.1参数ok&#xff1a;true时显示登…

django WEB聊天室项目

bbs系统项目中我们用到的ajax不多,但是在聊天室里用到的全是ajax,所以本项目的主要内容就是: 前端使用ajax传输json格式的数据是本节的重点以及 前端函数的的使用. http协议的特点是:短链接 ,服务器无法主动向客户端发送消息.都是客户端请求服务器返回消息. 那么问题来了,WEB聊…

Web聊天室项目

Web聊天室 项目描述所用技术业务分析接口设计和整体业务流程相关代码程序演示 项目描述 实现一个类似于在线QQ聊天的功能&#xff0c;不同的用户可以在相同的频道里发送和接受消息从而达到在线聊天的功能。 项目的主要功能有&#xff1a;注册用户、用户登陆、频道主页、进入频…

Web聊天室

目录 一&#xff0c;简介 二&#xff0c;开发环境 三&#xff0c;涉及的技术 四&#xff0c;主要功能 1.注册功能 2.登录功能 3.异地登陆&#xff08;第一次登录网页会被强制退出&#xff09; 4.发送消息 5.接收消息 6.注销登录 五&#xff0c;准备工作 1.引入开发…

八个步骤实现一个Web项目(在线聊天室)

实现一个在线网页的聊天室 Hello&#xff0c;今天给大家带来的是我的一个Web项目的开发过程的相关步骤&#xff0c;这个项目实现的功能是一个Web在线聊天室&#xff0c;简单的来说就是实现在网页版的聊天框&#xff0c;能够实现对于用户信息进行注册&#xff0c;登录&#xff…

基于JavaWeb聊天室设计与实现

目 录 摘要 i Abstract ii 1 概述 1 1.1 聊天室系统的基本概念 1 1.2 开发聊天室系统的意义 1 1.3 目前的研究现状 1 1.4 总体设计的基本思路 1 2 主要技术 3 2.1 JSP技术 3 2.2 JavaBean技术 4 2.3 Servlet技术 4 2.4 MyEclipse开发工具 6 2.5 Access数据库技术 6 2.6 Tomcat…

【Hadoop篇】启动hdfs集群时,提示: ERROR: Cannot set priority of zkfc process 5668

【问题描述】 启动hdfs集群时&#xff0c;遇到如下错误 [dylanhadoop102 hadoop]$ start-dfs.sh Starting namenodes on [hadoop102] Starting datanodes Starting secondary namenodes [hadoop104] Starting ZK Failover Controllers on NN hosts [hadoop102] hadoop102: ERR…

hadoop(XShell) 出现错误ERROR: Cannot set priority of namenode process 7927

项目场景&#xff1a; 网页上出错&#xff1a;&#xff08;出现这种问题有时候也可能是没有关闭防火墙&#xff09;&#xff0c;也可能是一下这种错误。 XShell上出错&#xff1a; 问题描述 XShell提示该地方出错&#xff1a; 上面说了是mapred-site.sml文件出错了 原因分析…

Yarn启动报错,ERROR: Cannot set priority of registrydns process xxxxx

问题&#xff1a; HDP 安装 yarn 时。或者重启服务的时候&#xff0c;yarn registry dns 无法启动。如下图所示&#xff1a; 报错信息&#xff1a; 查看报错信息&#xff0c;报错信息如下所示&#xff1a; ERROR: Cannot set priority of registrydns process xxxxx解决方式…

启动Hadoop集群,出现Cannot set priority of nodemanager(resourcemanager) process xxx问题

背景 &#xff08;不感兴趣可以跳过背景介绍&#xff09; 配置 Ubantu20.04jdk1.8.0_221hadoop 3.3.1hive 3.1.3三台虚拟机搭建Hadoop集群在安装hive的过程中&#xff0c;初始化数据库成功后&#xff08;mysql&#xff09;&#xff0c;输入 命令: ./bin/hive启动hive时出错&a…

【Hadoop】关于Hadoop集群HDFS启动问题:DataNode启动报错ERROR: Cannot set priority of namenode process

关于Hadoop集群HDFS启动问题&#xff1a;NameNode启动正常&#xff0c;DataNode启动报错ERROR: Cannot set priority of namenode process 19826 出了问题第一步一定要先看日志&#xff01;看日志&#xff01;看日志&#xff01; DataNode日志文件在Hadoop目录下的logs文件夹 …

Hadoop安装错误:Cannot set priority of secondarynamenode process : xxxxx

这是由于当前用户与可操作用户不匹配&#xff0c;产生权限冲突 使用以下命令可解决 chown -R root:root 文件名/&#xff0c;如 chown -R root:root hadoop3.1.3/ 成果&#xff1a;

Cannot set priority of datanode proces

hadoop03: ERROR: Cannot set priority of datanode process 2518错误解决 修改hdfs-site.xml配置文件 我的配置是 <configuration> <property><name>dfs.replication</name><value>4</value><description>副本个数&#xff0c;默…

启动hadoop集群报错ERROR: Cannot set priority of namenode process 2570

在格式化集群正常的情况下启动hadoop集群&#xff0c;但是却启动不起来&#xff0c;jps查看进程也是没有进程的&#xff1a; 查看log定位问题&#xff1a; [roothadoop320_01 logs]# cat hadoop-root-namenode-hadoop320_01.log因为主机名中包含了下划线&#xff0c;所以报错。…

JAVA-线程优先级setPriority

JAVA-线程优先级setPriority 1. 说明 线程分为1-10级&#xff0c;10级最高&#xff0c;优先级的高低不代表线程优先执行&#xff0c;需要看CPU的情况&#xff0c;一般情况下优先级高的先执行&#xff0c;程序先执行主方法&#xff0c;在执行线程。 2. 代码实现 public class …

hadoop入门1:ERROR Cannot set priority of datanode process

问题现象&#xff1a; 部署hadoop-3.1.2&#xff0c;启动hdfs时出现如下错误&#xff1a; Starting datanodes zglinux: ERROR: Cannot set priority of datanode process 2905解决方案&#xff1a; 此问题困扰了很久&#xff0c;百度上也搜不到&#xff0c;且是我已经在公司…

hadoop报错ERROR: Cannot set priority of namenode process

现象&#xff1a; 解决&#xff1a; 1.看Hadoop的日志&#xff1a; 查看namenode日志&#xff1a;tail -n 200 hadoop-xinjie-namenode-VM-0-9-centos.log &#xff08;文件目录所在位置&#xff1a;hadoop安装位置logs文件&#xff09; 2.发现是端口占用 3.命令查看端口占用…

Cannot set priority of nodemanager process xxx问题

Cannot set priority of nodemanager process xxx问题 一、问题描述 这个问题是我在配置hadoop集群时遇到的问题&#xff0c;启动resourcemanager和nodemanager时总会出现&#xff0c;但是奇怪的是只会在第二台机器出现这个问题&#xff0c;当把resourcemanager配置到其他机器时…

关于hadoop的Cannot set priority of datanode process

关于使用Hadoop3.1.2安装时的报错&#xff0c;在进行start-dfs.sh发生了Cannot set priority of datanode process xxx的报错。 之前搜索了很多文章一直没有效果&#xff0c;用了一个下午的时间。最后我思考是不是我的初始化操作有问题。因为之前我用root账户进行了初始化操作…