使用node、Socket.io 搭建简易聊天室(二)

简介: 使用node、Socket.io 搭建简易聊天室
  • 服务端

监听服务器建立连接和断开连接

io.on('connection', socket => {
    console.log('a user connected!');
    //disconnect
    socket.on('disconnect', () => {
        console.log('a user disconnected!');
    })
}

向全体人员广播

io.sockets.emit(自定义参数,data);

向全体人员广播

io.emit(自定义参数, data);

发送信息

socket.emit(自定义参数,data)

接收信息

socket.on(自定义参数,callback)

用户断开连接触发事件

socket.on('disconnect',callback);

信息传输对象为排除当前socket 对应的 client 的其他client

socket.broadcast.to(socketId ).emit('msg', msg)

向某房间发送消息

io.to(roomId).emit('event name', {
    // some data
})

加入/离开房间

// join room
socket.join(roomId);
// leave room
socket.leave(roomId);

服务端代码

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
// Express 初始化app可以提供给HTTP服务器的函数处理程序
const { Server } = require("socket.io");
const io = new Server(server);
// socket.io自动为我们服务客户端传递server(HTTP 服务器)对象来初始化 的新实例。然后我监听connection传入套接字的事件并将其记录到控制台
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});
let roomInfo = {};
let users = [];
io.sockets.on('connection', socket => {
  socket.on('disconnect', () => {
    console.log(`客户端断开链接`) 
  })
  socket.on('login', user => {
    if (-1 != users.indexOf(user)) {
      return false;
    }
    users.push(user)
    io.sockets.emit('login', user)
    io.sockets.emit('updateUserList', users)
  })
  socket.on('chat', data => {
    console.log(data, 'data')
    io.sockets.emit('chat', data)
  })
  socket.on('creatGroup', data => {
    if (!(data.roomId in roomInfo)) {
      roomInfo[data.roomId] = data;
    }
    io.sockets.emit('creatGroup', data.roomId)
  })
})
server.listen(3000, () => {
  console.log('listening on *:3000');
});
  • 客户端
    socket.emit(自定义参数,data) //发送信息
    socket.on(自定义参数,callback//接收信息
    部分js代码
  <script src="/socket.io/socket.io.js"></script>
  <script>
  socket = io.connect();
    //登录
    loginDom.addEventListener('click', () => {
      let user = userDom.value.trim();
      if (!user) {
        alert('用户名为空')
        return
      }
      socket.emit('login', user, 1)
    })
    // 创建群组
    creatGroupDom.addEventListener('click', () => {
      let user = userDom.value.trim();
      let group = { user, roomId: `room_id_${(Date.now())}` }
      socket.emit('creatGroup', group)
    })
    // 监听创建群组
    socket.on('creatGroup', data => {
      creatGroupDom.innerHTML = `<dt>群组列表</dt>`
    })
    //服务器连接提示
    socket.on('connect', () => {
      addMsg(roomNoticeDom, `服务器连接成功`)
    })
    //登录
    socket.on('login', (user) => {
      addMsg(roomNoticeDom, `${user}进入房间`)
      document.getElementById('user').disabled = true;
    })
    //更新用户列表
    socket.on('updateUserList', users => {
      userListDom.innerHTML = `<dt>用户列表</dt>`
      // userListDom.removeChild(ddDom)
      for (let user of users) {
        let dd = document.createElement('dd')
        dd.innerText = user;
        userListDom.appendChild(dd)
      }
    })
    //监听消息
    socket.on('chat', (data) => {
      console.log('接收到消息')
      var item = document.createElement('li');
      item.style.background = '#ff0'
      item.textContent = `${data.user}说:${data.message}`;
      messages.appendChild(item);
      window.scrollTo(0, document.body.scrollHeight + 30);
    })
    //发送消息
    form.addEventListener('submit', (e) => {
      e.preventDefault();
      if (message.value) {
        console.log(message, user, '发送信息成功')
        socket.emit('chat', { message: message.value, user: userDom.value.trim() })
      }
      message.value = '';
    })
  </script>   
  • 预览

目录
相关文章
|
11月前
|
存储 Python
【python】基于Socket的聊天室Python开发
【python】基于Socket的聊天室Python开发
|
4月前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
94 7
|
7月前
|
JSON 前端开发 JavaScript
socket.io即时通信前端配合Node案例
本文介绍了如何使用socket.io库在Node.js环境下实现一个简单的即时通信前端配合案例,包括了服务端和客户端的代码实现,以及如何通过socket.io进行事件的发送和监听来实现实时通信。
131 2
|
8月前
|
JavaScript 前端开发 Ubuntu
如何在 VPS 上安装 Express(Node.js 框架)并设置 Socket.io
如何在 VPS 上安装 Express(Node.js 框架)并设置 Socket.io
119 0
|
8月前
|
存储 JavaScript 数据库
如何使用 Socket.IO、Angular 和 Node.js 创建实时应用程序
如何使用 Socket.IO、Angular 和 Node.js 创建实时应用程序
61 0
|
11月前
|
NoSQL JavaScript 数据库连接
超级实用!详解Node.js中的mongodb模块和socket.io模块
超级实用!详解Node.js中的mongodb模块和socket.io模块
|
2月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
1月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
477 23
|
2月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
62 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
2月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!

热门文章

最新文章