NodeJS简单实现WebSocket功能示例

接下来我详细讲解“NodeJS简单实现WebSocket功能示例”的完整攻略。

WebSocket简介

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 从开始握手时就与 HTTP 具有相似之处,因此能够通过现有的 HTTP 端口(80 和 443)进行通信,避免了被防火墙过滤的风险。WebSocket 网络通信协议可以在不提供 HTTP 帮助的情况下,实现客户端和服务器之间的实时双向数据传输。

基础知识

  • WebSocket 握手过程服从 HTTP 协议;

  • WebSocket 彼此之间是平等的双向通信,可以发送消息到任何一方,可以是客户端也可以是服务端;

  • WebSocket 有着一套自己的协议和标准;

  • WebSocket 是基于 TCP 的,相比于 HTTP 更加适合在高并发下使用。

示例一

下面,我们通过一个简单的 WebSocket 实例来了解实现 WebSocket 的过程。

实现步骤

  1. 安装 ws 模块,可以通过以下命令安装:
npm install ws --save
  1. 编写服务器代码。在服务器代码中,我们需要创建一个 WebSocket 服务器,并监听绑定的端口。
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });
  ws.send('something');
});
  1. 启动服务器,在命令行中执行以下命令:
node server.js
  1. 客户端代码实现。下面是一个简单的 JavaScript 代码,实现了连接到服务器上,并发送一条消息的功能。
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
  ws.send('hello server');
});
ws.on('message', function incoming(data) {
  console.log(data);
});

实例效果

在控制台中可以看到如下输出:

received: hello server

示例二

下面,我们用 Express 搭建一个服务器,实现 WebSocket 交互。

实现步骤

  1. 安装 expressws 模块,可以通过以下命令安装:
npm install express ws --save
  1. 编写服务器代码。使用 Express 搭建一个服务器,监听 3000 端口,并开启 WebSocket 功能。
const express = require('express');
const app = express();
const server = require('http').createServer(app);
const WebSocket = require('ws');
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(ws) {
  console.log('client connected');
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
    ws.send(`message: ${message}`);
  });
  ws.on('close', function () {
    console.log('client disconnected');
  });
});
server.listen(3000, function () {
  console.log('server started on port 3000');
});
  1. 启动服务器,在命令行中执行以下命令:
node server.js
  1. 客户端代码实现。下面是一个简单的 JavaScript 代码,实现了连接到服务器上,并发送一条消息的功能。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>WebSocket Test</title>
  </head>
  <body>
    <form>
      <input id="message" type="text" placeholder="Enter message" autofocus>
      <button id="send">Send</button>
    </form>

    <script>
      const socket = new WebSocket('ws://localhost:3000');
      socket.onopen = function (event) {
        console.log('WebSocket connected', event);
      };
      socket.onmessage = function (event) {
        console.log('WebSocket message received', event.data);
      };
      socket.onclose = function (event) {
        console.error('WebSocket closed', event);
      };
      document.getElementById('send').addEventListener('click', function (event) {
        event.preventDefault();
        const message = document.getElementById('message').value;
        console.log('send message', message);
        socket.send(message);
      });
    </script>
  </body>
</html>

实例效果

打开浏览器访问 http://localhost:3000,在输入框中输入消息并点击“Send”按钮,可以在控制台中看到如下输出:

WebSocket connected Event {isTrusted: true, type: "open", target: WebSocket, currentTarget: WebSocket, eventPhase: 2, …}
send message hello world
WebSocket message received message: hello world

至此,NodeJS 的 WebSocket 功能已经实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS简单实现WebSocket功能示例 - Python技术站

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

相关文章

  • JS IE和FF兼容性问题汇总

    JS IE和FF兼容性问题汇总 JavaScript(简称JS)是一门客户端脚本语言,广泛应用于Web开发中。然而,不同浏览器的JS引擎实现存在一些差别,导致在不同浏览器中JS代码可能会出现不同的结果,从而引发一些兼容性问题。本文主要针对JS在IE和FF浏览器中的兼容性问题进行汇总,并提供相应的解决方案。 1. 对象查找不同 在IE中,getElementB…

    node js 2023年6月8日
    00
  • TypeScript基本类型之typeof和keyof详解

    TypeScript基本类型之typeof和keyof详解 在TypeScript中,typeof和keyof是两个非常重要的基本类型运算符。typeof可用于获取变量的类型,而keyof可用于获取对象类型的键类型。 typeof typeof可用于获取变量的类型,其语法为: typeof x 这里的x可以是任意类型的变量、对象或函数,返回结果为x的类型。 …

    node js 2023年6月8日
    00
  • 详解Node.js如何开发命令行工具

    下面是详细讲解“详解Node.js如何开发命令行工具”的完整攻略。 什么是命令行工具? 命令行工具是一种与用户通过命令行交互的程序,通常以命令行参数的形式接收输入,并将解析后的参数进行处理。 常见的命令行工具有Git、npm等,而这些工具均是基于Node.js开发。 Node.js如何开发命令行工具? 以下是Node.js开发命令行工具的完整攻略: 步骤1:…

    node js 2023年6月8日
    00
  • VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决

    针对“VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误”的解决,可以按以下步骤进行: 问题分析 白屏报错 SCRIPT1002: 语法错误,是IE11对于语法不支持的情况下的报错信息。VUE项目在IE11中常遇到此类问题,通常是由于ES6语法不被IE11所支持而导致。因此,我们需要对VUE项目中涉及到的ES6语法进行转换或降级。 解决方案 安…

    node js 2023年6月8日
    00
  • Nodejs 中的 Buffer 类的创建与基本使用

    Buffer 类是 Node.js 中的一个核心模块,它用于处理二进制数据。Node.js 中的 Buffer 类提供了一种在 JavaScript 环境下处理二进制数据的方式。它类似于数组,但它能存储任意类型的数据。 本篇攻略主要介绍 Node.js 中的 Buffer 类的创建和基本使用。 创建 Buffer 对象 使用 Buffer 类,需要先创建一个…

    node js 2023年6月8日
    00
  • Linux编程之ICMP洪水攻击

    ICMP洪水攻击是一种利用大量ICMP数据包使目标主机网络资源占用充足而导致服务不可用的攻击方式。在Linux系统中使用C语言编写程序实现ICMP洪水攻击主要包含以下步骤: 1. 准备工作 首先需要安装libpcap开发环境,libpcap提供了底层操作网络数据包的接口。在Ubuntu上,可以通过下面的命令安装: sudo apt-get install l…

    node js 2023年6月8日
    00
  • webpack打包node.js后端项目的方法

    下面是“webpack打包node.js后端项目的方法”的完整攻略。 1. 确认项目结构 首先要确认项目结构是否满足webpack打包的要求。在将node.js后端项目使用webpack打包前,请先确认项目目录结构是否符合以下要求: 项目根目录下应该有一个 main.js 或者 index.js 的入口文件。 项目应该统一使用 import/export 语…

    node js 2023年6月8日
    00
  • 了不起的node.js读书笔记之node.js中的特性

    了不起的node.js读书笔记之node.js中的特性 介绍 本书主要介绍了Node.js中的一些特性和技巧,包括如何使用Node.js构建Web服务器和命令行工具等。本书适合已有一定编程经验的读者,将会有助于加深对Node.js的理解和应用。 Node.js的特性 事件驱动 Node.js是基于事件驱动的编程模型,这意味着程序会在接受到事件后立即响应,而不…

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