node.js实现websocket的即时通讯详解

"node.js实现websocket的即时通讯详解"的攻略如下:

什么是 WebSocket

WebSocket 是一种在单个 TCP 连接上进行双向通信的网络协议。它使得服务器可以直接向客户端推送数据,而不需要客户端轮询服务器获取数据。

实现 WebSocket 的方法

在 Node.js 中,可以使用 ws 模块来实现 WebSocket。下面是一个基本的 WebSocket 服务端代码:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('connected');

  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('hello from server');
});

这个服务端会监听本地的 8080 端口,当客户端和服务端建立连接时,会打印 connected。如果服务端收到客户端发送的消息,会在控制台上打印出来。同时,服务端会向客户端发送一条消息 hello from server

以下是一个基本的 WebSocket 客户端代码:

const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');

ws.on('open', function open() {
  console.log('connected to server');

  ws.send('hello from client');
});

ws.on('message', function incoming(data) {
  console.log('received: %s', data);
});

ws.on('close', function close() {
  console.log('disconnected from server');
});

这个客户端会连接到本地的 8080 端口,当连接成功时,会打印 connected to server。它会向服务端发送一条消息 hello from client。如果客户端收到服务端发送的消息,会在控制台上打印出来。最后,客户端会打印 disconnected from server

实现实时聊天室

下面是一个基本的实时聊天室的代码示例:

服务端:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

const clients = [];

wss.on('connection', function connection(ws) {
  clients.push(ws);

  console.log('connected');

  ws.on('message', function incoming(message) {
    console.log('received: %s', message);

    clients.forEach(function each(client) {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  ws.on('close', function close() {
    clients.splice(clients.indexOf(ws), 1);

    console.log('disconnected');
  });
});

这个服务端和之前的基本服务端很相似,唯一的区别是它会将客户端对象存储到 clients 数组中,以便于在有新消息时可以向所有连接到服务器的客户端广播。

当接收到消息时,服务端会遍历 clients 数组,将消息发送给除了当前客户端外的所有客户端。

客户端:

const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');

ws.on('open', function open() {
  console.log('connected');

  ws.on('message', function incoming(data) {
    console.log('received: %s', data);
  });

  const input = document.getElementById('input');
  input.addEventListener('keypress', function(event) {
    if (event.keyCode === 13) {
      ws.send(input.value);
      input.value = '';
    }
  });
});

ws.on('close', function close() {
  console.log('disconnected');
});

这个客户端会连接到本地的 8080 端口,并监听来自服务端的消息。

同时,它也监听用户在页面上输入的消息,并在用户按下回车键时将消息发送到服务端。

总结

以上就是实现 WebSocket 的基本方法,我们也成功地实现了一个实时聊天室。虽然 WebSocket 有很多高级特性和优化方法,但是对于大多数简单的应用场景,以上的实现已经足够了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js实现websocket的即时通讯详解 - Python技术站

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

相关文章

  • nodejs之get/post请求的几种方式小结

    下面是“nodejs之get/post请求的几种方式小结”的完整攻略。 简介 在 Node.js 服务器中,我们经常需要处理来自客户端的 HTTP 请求,其中常见的请求方式有 GET 和 POST 请求。在本文中,我们将会向你展示如何使用 Node.js 处理 GET/POST 请求以及几种常用的方式。 处理 GET 请求 1. 使用 querystring…

    node js 2023年6月8日
    00
  • Node文件操作汇总实例详解

    当你需要为你的 Node.js 应用程序创建、读取或更新文件时,你需要了解 Node.js 文件系统模块的 API。Node.js 提供了许多文件操作方法,例如创建、打开、读取、写入、删除和关闭文件等操作。本文将详细介绍 Node.js 文件操作常用的 API 及其使用方法。 核心模块 Node.js 中提供了 fs 核心模块,我们可以通过 require(…

    node js 2023年6月8日
    00
  • node脚手架搭建服务器实现token验证的方法

    关于“node脚手架搭建服务器实现token验证的方法”的完整攻略,我大致分为以下几个步骤: 使用脚手架快速搭建一个node项目,并安装express框架和jsonwebtoken等必要的依赖模块。 编写代码实现路由的定义和token的验证。 使用postman等工具进行测试,确保服务器能够正确验证token。 接下来我将详细讲解以上步骤: 1. 使用脚手架…

    node js 2023年6月8日
    00
  • Nodejs如何解决跨域(CORS)

    Node.js可以通过设置header头或使用第三方模块实现跨域访问(CORS)。 一、设置header头 在服务端设置Access-Control-Allow-Origin头即可实现跨域访问: var http = require(‘http’); var server = http.createServer(function(request, respo…

    node js 2023年6月8日
    00
  • 基于JavaScript实现一个简单的Vue

    下面我将为你详细讲解“基于JavaScript实现一个简单的Vue”的完整攻略。 什么是Vue Vue是一个渐进式的JavaScript框架,它被设计用于构建大型单页应用(SPA)。Vue提供组件化的开发模式,使得代码结构更加清晰易懂,提高开发效率,降低维护成本。 Vue的核心概念 在我们开始实现一个简单的Vue之前,先让我们了解一下Vue的核心概念: 数据…

    node js 2023年6月8日
    00
  • koa源码中promise的解读

    下面是关于“koa源码中promise的解读”的完整攻略: 1. koa中的Promise koa是一个基于Node.js平台的下一代web开发框架,它实现了ES6中的async/await, 而async/await依赖于Promise。因此在koa中,Promise是一个非常重要的概念。 在koa的实现中,Promise主要用于解决异步回调嵌套的问题,通…

    node js 2023年6月8日
    00
  • JS 使用for循环遍历子节点查找元素

    下面是使用for循环遍历子节点查找元素的完整攻略。 1. 获取父节点和子节点 首先,我们需要使用 document.getElementById()方法或其他方法获取到父节点,例如: const parent = document.getElementById(‘parentNode’); 然后,我们需要获取到父节点的所有子节点,可以使用 childNode…

    node js 2023年6月8日
    00
  • 详解Puppeteer 入门教程

    详解Puppeteer 入门教程 什么是Puppeteer Puppeteer是一个由Google Chrome团队开发的Node.js库,用于控制和操作Chrome浏览器。它提供了一个高级API,可以允许开发者通过JavaScript来直接操纵网页,例如生成页面截图、生成PDF、抓取数据、自动化表单提交等等。 安装Puppeteer 安装puppeteer…

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