nodejs结合Socket.IO实现的即时通讯功能详解

Node.js结合Socket.IO实现的即时通讯功能详解

什么是Socket.IO

Socket.IO 是一个 JavaScript 库,用于实现实时、双向、基于事件的通信。它可在不同的浏览器和操作系统下使用,并与任何服务端 -- 不论它是基于 Node.js 的还是不是 -- 兼容。它主要用于实现即时通讯功能,例如聊天室、弹幕等。

实现 Socket.IO

安装依赖

我们可以使用 npm(Node.js 自带的包管理器)来安装 Socket.IO。

npm install socket.io

服务端代码

const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);

// 监听端口
http.listen(3000, () => {
  console.log('listening on *:3000');
});

// 监听连接事件
io.on('connection', (socket) => {
  console.log('a user connected');
  // 监听聊天消息事件
  socket.on('chat message', (msg) => {
    console.log('message: ' + msg);
    // 将消息广播给已连接的其他客户端
    io.emit('chat message', msg);
  });
  // 监听断开连接事件
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

客户端代码

<!DOCTYPE html>
<html>
<head>
  <title>Socket.IO chat</title>
  <script src="/socket.io/socket.io.js"></script>
  <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body { font: 13px Helvetica, Arial; }
    form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
    form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
    form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
    #messages { list-style-type: none; margin: 0; padding: 0; }
    #messages li { padding: 5px 10px; }
    #messages li:nth-child(odd) { background: #eee; }
  </style>
</head>
<body>
  <ul id="messages"></ul>
  <form action="">
    <input id="m" autocomplete="off" /><button>Send</button>
  </form>
  <script>
    const socket = io();
    // 监听聊天消息事件
    socket.on('chat message', (msg) => {
      console.log('message: ' + msg);
      // 插入消息到页面
      $('#messages').append($('<li>').text(msg));
      // 滚动显示
      window.scrollTo(0, document.body.scrollHeight);
    });
    // 发送消息
    $('form').submit(() => {
      // 发送消息事件
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
  </script>
</body>
</html>

示例说明

示例一

我们可以使用 Node.js 和 Socket.IO 实现一个简单的聊天室。

首先,我们需要建立服务端和客户端的连接。在服务端,我们监听 connection 事件,获取客户端的连接。在客户端,我们使用 io() 方法创建连接。

// 服务端
const io = require('socket.io')(http);
io.on('connection', (socket) => {
  console.log('a user connected');
});

// 客户端
const socket = io();

然后,我们需要监听客户端发送的消息,和向客户端发送消息。在服务端,我们监听 chat message 事件,获取消息内容并广播给连接的其他客户端。在客户端,我们监听 chat message 事件,向页面插入消息。

// 服务端
socket.on('chat message', (msg) => {
  console.log('message: ' + msg);
  io.emit('chat message', msg);
});

// 客户端
socket.on('chat message', (msg) => {
  $('#messages').append($('<li>').text(msg));
  window.scrollTo(0, document.body.scrollHeight);
});

示例二

我们可以使用 Node.js 和 Socket.IO 实现一个多人弹幕功能。

首先,我们需要建立服务端和客户端的连接。同样地,在服务端,我们监听 connection 事件,获取客户端的连接。在客户端,我们使用 io() 方法创建连接。

// 服务端
const io = require('socket.io')(http);
io.on('connection', (socket) => {
  console.log('a user connected');
});

// 客户端
const socket = io();

然后,我们需要监听客户端发送的弹幕消息,和向客户端发送弹幕。在服务端,我们监听 bullet 事件,获取弹幕内容并广播给连接的其他客户端。在客户端,我们向服务端发送弹幕消息,并将其显示在页面上。

// 服务端
socket.on('bullet', (msg) => {
  console.log('bullet: ' + msg);
  io.emit('bullet', msg);
});

// 客户端
socket.emit('bullet', message);
$('<p>', {
  text: message,
  style: `top: ${position}px; color: ${color}; font-size: ${size}px;`
}).appendTo('#bullet-container');

注意,我们需要给每一个弹幕一个随机的显示颜色、字体大小和显示位置。这可以使用 JavaScript 生成随机数来实现。

const color = getRandomColor();
const size = getRandomSize();
const position = getRandomPosition();

完整的示例代码可以在这里找到:Node.js 和 Socket.IO 实现的多人弹幕

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs结合Socket.IO实现的即时通讯功能详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • JavaScript iframe 实现多窗口通信实例详解

    JavaScript iframe 实现多窗口通信实例详解 当我们在一个页面中嵌入多个 iframe 元素时,它们之间的通信就变得比较复杂。但是,我们可以使用 JavaScript 来实现 iframe 之间的通信。在本文中,我们将深入讨论如何使用 JavaScript,通过 iframe 实现多窗口通信的过程和相关的示例代码。 iframe 与 JavaS…

    node js 2023年6月8日
    00
  • node命令行工具之实现项目工程自动初始化的标准流程

    下面是实现项目工程自动初始化的标准流程: 1. 创建项目 在命令行中创建项目文件夹,并在其内部添加项目 package.json 文件。 mkdir auto-init-project cd auto-init-project npm init -y 2. 创建node cli工具 使用以下命令生成一个全局安装的包,该包将成为node命令行工具。 npm i…

    node js 2023年6月8日
    00
  • node版本过高该如何将node版本降低

    要将Node版本降低,可以使用Node版本管理器(Node Version Manager,NVM)来实现。下面是降低Node版本的详细步骤: 1. 安装nvm 首先,需要在你的计算机上安装nvm。在Linux或者Mac OS X上使用以下命令安装: wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm…

    node js 2023年6月8日
    00
  • ubuntu系统下使用pm2设置nodejs开机自启动的方法

    下面是使用pm2设置Node.js开机自启动的完整攻略。 前置条件 在开始之前,需要确保您已经完成以下任务: 在Ubuntu操作系统中安装Node.js和npm。 在Ubuntu操作系统中安装pm2,可以通过执行以下命令完成安装: npm install pm2 -g。 步骤 启动应用程序 首先,您需要使用pm2启动应用程序。您可以通过在项目根目录下执行以下…

    node js 2023年6月8日
    00
  • Node.js实现文件上传的示例

    下面我将为你介绍一下“Node.js实现文件上传的示例”的完整攻略。 什么是文件上传 文件上传是指将本地的文件上传到服务器上的过程。在Web开发中经常要用到文件上传,比如用户上传头像、PDF文件以及其他文档等。 Node.js实现文件上传的示例 Node.js可以很方便地实现文件上传,需要用到第三方模块formidable。下面是实现文件上传的步骤: 步骤1…

    node js 2023年6月8日
    00
  • Node.js 进程平滑离场剖析小结

    Node.js 进程平滑离场剖析是指在 Node.js 应用程序运行过程中,如何平滑地结束进程,避免出现异常情况和数据丢失。下面是几个关键步骤: 1. 理解Node.js应用程序的运行模式 Node.js 应用程序的运行模式是“单线程、异步 I/O、事件循环”的模式。这意味着在 Node.js 应用程序中,多个操作可以同时进行,而不必等待之前的操作完成。这是…

    node js 2023年6月8日
    00
  • express如何使用session与cookie的方法

    下面是关于如何使用session与cookie的完整攻略: 1. 安装express-session 打开终端,并定位到你的项目目录,运行以下命令安装express-session: npm install express-session –save 2. 引入express-session和cookie-parser 先在你的Node.js文件头部中添加…

    node js 2023年6月8日
    00
  • node.js利用socket.io实现多人在线匹配联机五子棋

    实现多人在线匹配联机五子棋可以采用node.js框架和socket.io库来完成。 安装node.js和socket.io 首先需要安装node.js和socket.io,可以从官网下载安装。安装完成后,可以使用以下命令安装socket.io: npm install socket.io 创建服务器 使用node.js创建一个简单的服务器,代码如下: var…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部