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

yizhihongxing

"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日

相关文章

  • 在Docker快速部署Node.js应用的详细步骤

    当使用Docker来部署Node.js应用时,以下是一些简单的步骤: 步骤1:创建Node.js应用 首先,需要创建一个Node.js应用程序。可以在您的计算机上使用任何编辑器,例如Visual Studio Code,Sublime Text等等。就本文而言,我们为您提供一个简单的HTTP服务器示例。 const http = require(‘http’…

    node js 2023年6月8日
    00
  • windows系统下更新nodejs版本的方案

    更新 Node.js 版本通常需要在 Windows 系统下使用命令行工具进一步操作。下面的攻略将介绍如何从较旧版本更新到最新版本的 Node.js。 步骤一:卸载旧版本 在安装新版本之前,必须卸载旧版本。在 Windows 系统中,可以使用“控制面板”来卸载 Node.js。 打开“控制面板”,并进入“程序和功能”。 在列表中找到旧版本 Node.js,右…

    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
  • 浅谈Node.js 中间件模式

    当我们构建一个基于Node.js的Web应用时,常常需要处理大量的中间件。中间件是一个函数,可以访问请求和响应对象,以及应用程序的请求处理管道链。中间件函数可以执行一些操作,例如将请求传递给下一个中间件、修改请求对象或响应对象,或者直接返回响应。 中间件模式 中间件模式是Node.js应用程序的基础设计模式之一。它将请求处理过程分解为一系列函数,并通过链式调…

    node js 2023年6月8日
    00
  • Node.js 服务器端应用开发框架 — Hapi.js

    Hapi.js 是一个 Node.js 服务器端应用开发框架,它基于 Node.js 的 HTTP 实现,并且提供了一系列的工具,使得开发者可以轻松地构建 Web 应用,API 服务等。以下是使用 Hapi.js 框架开发应用的完整攻略。 安装 在使用 Hapi.js 框架之前,我们需要先安装 Node.js,然后使用 Node.js 的包管理器 npm 进…

    node js 2023年6月8日
    00
  • NodeJS创建基础应用并应用模板引擎

    下面是“NodeJS创建基础应用并应用模板引擎”的完整攻略: 1. 准备工作 在开始创建基础应用之前,我们需要确保已经安装了Node.js。可以在命令行或终端中运行以下命令验证: node -v 如果能够输出 Node.js 的版本号,即表明已经安装成功。 2. 创建基础应用 使用以下命令可以快速创建一个空的Node.js应用: mkdir myApp //…

    node js 2023年6月8日
    00
  • Node调试工具JSHint的安装及配置教程

    下面是“Node调试工具JSHint的安装及配置教程”的完整攻略: Node调试工具JSHint的安装及配置教程 什么是JSHint JSHint是一个用于静态代码分析的工具,主要用于检测JavaScript代码是否符合规范以及是否有潜在的问题。 安装JSHint 在安装JSHint之前,首先确保已经安装了Node.js环境。然后,可以通过npm命令进行安装…

    node js 2023年6月8日
    00
  • nodejs超出最大的调用栈错误问题

    当在Node.js中执行一个超出函数嵌套深度的操作时,可能会遇到“RangeError: Maximum call stack size exceeded”错误,这是由于JavaScript语言中存在调用栈的限制,一旦函数嵌套层数过深,调用栈就会超过它的最大限制。下面将介绍如何排查并修复此类“超出最大的调用栈”错误。 问题定位 当程序发生类似“RangeEr…

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