node.js基于socket.io快速实现一个实时通讯应用

下面详细讲解“node.js基于socket.io快速实现一个实时通讯应用”的完整攻略。

简介

Socket.io 是一个优秀的跨浏览器的 WebSocket 实现,它解决了 WebSocket 在使用过程中的兼容性问题,并且实现了多种应用级别的实时通信协议。使用 Node.js 和 Socket.io 可以快速实现一个实时通讯应用。

准备

首先,你需要安装 Node.js 和 Socket.io。

你可以在官网下载 Node.js 并安装。然后,在命令行界面输入以下命令安装 Socket.io:

npm install socket.io --save

实现

以下是一个简单的实时聊天应用的代码示例:

  1. 服务端代码
// 引入 socket.io
const io = require('socket.io')(server);

// 监听连接事件
io.on('connection', socket => {
  console.log('a user connected');

  // 监听断开连接事件
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });

  // 监听聊天消息事件
  socket.on('chat message', msg => {
    console.log('message: ' + msg);
    // 广播消息给所有连接的客户端
    io.emit('chat message', msg);
  });
});
  1. 客户端代码
<!doctype html>
<html>
<head>
  <title>Socket.io Chat</title>
</head>
<body>
  <ul id="messages"></ul>
  <form id="chat-form">
    <input id="message-input" autocomplete="off">
    <button>Send</button>
  </form>

  <script src="/socket.io/socket.io.js"></script>
  <script>
    // 创建 Socket.io 连接
    const socket = io();

    // 监听聊天消息事件
    socket.on('chat message', function(msg) {
      const item = document.createElement('li');
      item.textContent = msg;
      document.getElementById('messages').appendChild(item);
    });

    // 发送消息
    const form = document.getElementById('chat-form');
    form.addEventListener('submit', function(e) {
      e.preventDefault(); // 阻止页面刷新
      const input = document.getElementById('message-input');
      const msg = input.value;
      socket.emit('chat message', msg);
      input.value = '';
    });
  </script>
</body>
</html>

在本示例中,服务端监听连接事件,当有客户端连接时打印“a user connected”。监听聊天消息事件,在收到消息后广播给所有连接的客户端。客户端在页面加载完毕之后创建与服务端的 Socket.io 连接,监听聊天消息事件和表单的提交事件,在表单提交时发送消息。

示例说明

示例一:实时在线人数统计

可以通过监听连接和断开连接事件,来实时更新客户端在线人数。

服务端代码:

let onlineCount = 0;
io.on('connection', socket => {
  onlineCount++;
  io.emit('online count', onlineCount);
  socket.on('disconnect', () => {
    onlineCount--;
    io.emit('online count', onlineCount);
  });
});

客户端代码:

<p>在线人数: <span id="online-count"></span></p>
<script>
  socket.on('online count', count => {
    document.getElementById('online-count').textContent = count;
  });
</script>

示例二:实时推送新闻

可以在服务器端定时推送新闻,客户端定时向服务器请求新闻。

服务端代码:

// 模拟推送新闻
const news = ['news1', 'news2', 'news3'];
let index = 0;
setInterval(() => {
  io.emit('news', news[index]);
  index = (index + 1) % news.length;
}, 3000);

客户端代码:

<div id="news"></div>
<script>
  // 获取新闻
  const getNews = () => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', '/news');
    xhr.onload = () => {
      document.getElementById('news').textContent = xhr.responseText;
      setTimeout(getNews, 3000); // 定时请求新闻
    };
    xhr.send();
  };

  // 初始化新闻
  getNews();

  // 监听新闻事件
  socket.on('news', news => {
    document.getElementById('news').textContent = news;
  });
</script>

这样,在客户端打开页面的时候,会自动请求一遍最新的新闻,并定时请求最新的新闻。服务端会每隔一定时间推送一条最新新闻。所有在线的客户端都会同时收到这条新闻。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js基于socket.io快速实现一个实时通讯应用 - Python技术站

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

相关文章

  • 利用nvm管理多个版本的node.js与npm详解

    当我们需要在同一台电脑上使用不同版本的 Node.js 和 npm 时,使用 nvm (Node.js Version Manager) 可以方便地管理和切换版本。下面是详细的操作步骤。 安装 nvm 安装 nvm 一般有两种方法,一种是使用 curl,另一种是使用 wget,这里以 curl 为例。打开终端,输入如下命令: $ curl -o- https…

    node js 2023年6月8日
    00
  • NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】

    NodeJS设计模式总结 本文总结了 NodeJS 中常用的设计模式,包括: 单例模式 适配器模式 装饰模式 观察者模式 单例模式 单例模式保证一个类只有一个实例,并提供一个全局的访问入口。 在 NodeJS 中实现单例模式可以通过 module.exports 将类的实例赋值给一个变量,这个变量就成为了全局的访问入口。 示例代码: // Singleton…

    node js 2023年6月8日
    00
  • nodejs实例解析(输出hello world)

    Node.js是基于Chrome V8引擎开发的运行在服务器端的JavaScript运行环境,提供了一种轻量级、高效、可扩展的方式来搭建网络应用程序。下面是如何使用Node.js输出“hello world”的攻略。 准备工作 在开始之前,请确保已经安装了Node.js。可以在命令行中输入以下命令检查是否已经安装: node -v 如果已经安装,则会输出安装…

    node js 2023年6月8日
    00
  • node.js中http模块和url模块的简单介绍

    下面是关于node.js中http模块和url模块的简单介绍: http模块简介 http模块是Node.js中的内置模块,提供了创建HTTP服务器和HTTP客户端的工具。可以用它发送HTTP请求、接收HTTP响应以及创建HTTP服务器和客户端。 创建一个简单的HTTP服务器 下面是创建一个简单的HTTP服务器的示例代码: const http = requ…

    node js 2023年6月8日
    00
  • 详解nodejs中的异步迭代器

    详解 Node.js 中的异步迭代器 什么是异步迭代器? 在 Node.js 中,迭代器(Iterator)是一种数据结构,它会按照一定的顺序,逐个返回集合中的元素。异步迭代器(AsyncIterator)则是迭代器的异步版本,它可以接受 Promise 对象,并使用 async/await 实现异步操作。 异步迭代器是一个实现了 Symbol.asyncI…

    node js 2023年6月8日
    00
  • 详解如何在vscode里面调试js和node.js的方法步骤

    在VS Code中调试JavaScript和Node.js的方法步骤如下: 步骤一:在项目中添加调试配置文件 在VS Code中,我们需要在项目中添加一个调试配置文件launch.json。该文件用于配置调试器的行为和选项,以便在调试时获取所需的上下文。 要添加launch.json文件,请按照以下步骤操作: 在VS Code中打开您的项目。 点击VS Co…

    node js 2023年6月8日
    00
  • Node.js 使用axios读写influxDB的方法示例

    我来为您讲解一下相关内容。 什么是Node.js Node.js是一个基于V8引擎的JavaScript运行环境,在服务器端执行JavaScript代码。它具有 event-driven、non-blocking I/O 的特性,可以提供高效的性能。 什么是axios axios是一个基于 Promise 的 HTTP 请求客户端,可以轻松地使用浏览器和No…

    node js 2023年6月8日
    00
  • JavaScript设计模式之单例模式原理与用法实例分析

    JavaScript设计模式之单例模式原理与用法实例分析 什么是单例模式? 单例模式是一种经典的设计模式,它保证一个类只有一个实例并提供一个全局的访问点。在JavaScript中,单例模式可以用于创建唯一的全局对象。 单例模式的应用场景 单例模式的应用场景非常广泛,例如: 管理页面中的全局状态,例如Vue.js中的store 缓存数据,例如浏览器中的loca…

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