基于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.系统消息

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

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

三、项目演示

登录界面

聊天界面

基于socket.io的web聊天室相关推荐

  1. Express+Socket.IO 实现简易聊天室

    代码地址如下: http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: ...

  2. Linux下基于socket和多线程的聊天室小程序

    转载:http://blog.csdn.net/robot__man/article/details/52460733 要求:基于TCP编写,一个聊天室最多100人.  客户端:  1.用户需要登录, ...

  3. 使用python基于socket的tcp服务器聊天室

    # coding=utf-8 import socket,threading,time '''代码说明:1.创建一个字典用于接受客户端的用户名和信息2.创建一个类对象client用于编写客户端套接字对 ...

  4. node+socket.io 实现一个聊天室

    我们只做简单的实现,不接入数据库,nodejs也不使用express和koa等框架 因此依赖只有两个: 1.socket.io 2.mime(用于获取静态资源时获取文件的mime类型) 安装命令: n ...

  5. 基于Springboot+Netty实现Web聊天室

    文章目录 一.创建项目 二.编写代码 三.项目测试 总结 参考 一.创建项目 在IDEA中新建Spring项目 选择JDK版本,然后点击next 选择Spring Web 设置项目名称与位置 二.编写 ...

  6. node+socket.io+HTTP简易聊天室

    用node+socket.io+HTTP做一个聊天室.聊天室主要由两部分构成,服务器(index.js)以及客户端(index.html). 文件目录如下所示: (node_modules文件夹以及p ...

  7. 基于Springboot+Netty实现Web聊天室【网络通信编程】

    目录 一.IDEA创建项目 二.编写代码 三.运行程序 四.参考文献 一.IDEA创建项目 在IDEA中创建一个Spring框架的项目 JDK版本选择8(也就是1.8) 二.编写代码 DemoAppl ...

  8. 【IDEA】基于Springboot+Netty实现Web聊天室

    一.项目创建 IDEA中新建Spring项目 二.环境配置 1.在pom.xml里面添加依赖 <dependency><groupId>io.netty</groupId ...

  9. php做群聊功能,使用socket.io 实现群聊天室

    本篇向大家分享一个socket.io的使用实例,实现群聊天的功能.如果想使用socket.io那么必须借助于nodejs来实现服务端,因此我们需要在nodejs中安装socket.io 安装socke ...

最新文章

  1. springboot-springmvc-requestParam
  2. Centos运行级别和开机过程
  3. 修改Android设备在Windows设备管理器出现的设备名称
  4. Leetcode 137. Single Number II JAVA语言
  5. boost::function模块boost::ref的测试程序
  6. 商务英语如何利用计算机思维,如何更好的运用商务英语
  7. 河北软件职业技术学院计算机专业分数线,河北软件职业技术学院历年分数线 2021河北软件职业技术学院录取分数线...
  8. 排序算法 快速排序 python 0913
  9. 字典排序什么意思_列表及字典的排序
  10. winform 的exe为什么移动之后不能使用_C++MyDock配置要求、所需运行库、常见问题 初次使用必看...
  11. Rust : codewars的Sum of Pairs
  12. html选择日期的组件,怎样实现一个datePicker(日期选择)组件
  13. matlab数学建模-遗传算法基本原理
  14. 非负矩阵分解小白入门
  15. 应届毕业生年薪50W,你敢相信吗?
  16. adb基础命令学习随笔
  17. 发展数字经济具有重要意义
  18. 几款.Net加密/加壳工具的比较
  19. Imagination宣布推出基于RISC-V的CPU产品系列
  20. 计算机普通话水平测试有用吗,计算机辅助普通话水平测试的优点与问题

热门文章

  1. 【操作系统】-- 银行家算法
  2. 一文读懂原型链 prototype和__proto__详解
  3. 稳字当头,网易加码未来
  4. 【Linux】 NFS服务器实现开机自动挂载
  5. MySQL导入导出实践
  6. BYOD时代下的无代理准入控制系统
  7. VNC多用户远程桌面
  8. 引入bootstrap
  9. 快速安装Windows XP系统的一种方法
  10. ule01- linux系统的基础