用nodejs搭建websocket服务器

使用Node.js可以很方便地搭建Websocket服务器,下面就来详细讲解一下具体的步骤。

步骤1:安装依赖

安装websocket和ws模块,这两个模块都可以用于搭建websocket服务器,我们在下面的示例中将演示这两个模块的使用方法。可以使用npm命令进行安装:

npm install websocket
npm install ws

步骤2:创建WebSocket服务器

使用websocket模块搭建websocket服务器的代码如下:

const WebSocketServer = require('websocket').server;
const http = require('http');

const server = http.createServer((req, res) => {
  console.log('Received request for ' + req.url);
  res.writeHead(404);
  res.end();
});

server.listen(8080, () => {
  console.log('Server is listening on port 8080');
});

wsServer = new WebSocketServer({
  httpServer: server,
  autoAcceptConnections: false
});

function originIsAllowed(origin) {
  return true;  // 可以设置只允许特定的origin连接
}

wsServer.on('request', (request) => {
  if (!originIsAllowed(request.origin)) {
    request.reject();
    console.log('Connection from origin ' + request.origin + ' rejected.');
    return;
  }

  const connection = request.accept('echo-protocol', request.origin);
  console.log('Connection accepted.');

  connection.on('message', (message) => {
    if (message.type === 'utf8') {
      console.log('Received message: ' + message.utf8Data);
      connection.sendUTF(message.utf8Data);
    } else if (message.type === 'binary') {
      console.log('Received binary message of ' + message.binaryData.length + ' bytes');
      connection.sendBytes(message.binaryData);
    }
  });

  connection.on('close', (reasonCode, description) => {
    console.log('Peer ' + connection.remoteAddress + ' disconnected with reason code: ' + reasonCode + " and description: " + description);
  });
});

使用ws模块搭建websocket服务器的代码如下:

const WebSocket = require('ws');

const server = new WebSocket.Server({port: 8080});

console.log('Server is listening on port 8080');

server.on('connection', (socket) => {
  console.log('Connection accepted.');

  socket.on('message', (message) => {
    console.log('Received message: ' + message);
    socket.send('Received message: ' + message);
  });

  socket.on('close', (event) => {
    console.log('Connection closed.', event);
  });

  socket.on('error', (event) => {
    console.log('Error:', event);
  });
});

在这两个示例中,我们创建了一个WebSocket服务器并且监听端口8080。当有新客户端连接到服务器时,会触发connection事件。这个事件的回调函数中可以处理客户端发来的消息,也可以向客户端发送消息。当客户端断开连接或者出现错误时,会分别触发close事件和error事件。

示例1:使用websocket模块搭建的WebSocket服务器

使用websocket模块搭建的WebSocket服务器可以使用浏览器自带的WebSocket API进行连接和通信,下面是一个简单的示例:

const ws = new WebSocket('ws://localhost:8080', 'echo-protocol');

ws.onopen = () => {
  console.log('WebSocket connected.');
  ws.send('Hello Server!');
};

ws.onmessage = (event) => {
  console.log('Received message: ' + event.data);
};

ws.onclose = (event) => {
  console.log('WebSocket disconnected. Code: ' + event.code + ', Reason: ' + event.reason);
};

ws.onerror = (event) => {
  console.log('WebSocket error:', event);
};

这段代码会向我们刚才创建的WebSocket服务器发送一条消息'Hello Server!',并在收到服务器的回复时打印消息内容。在此之前,需要在浏览器端引入websocket.min.js库。

示例2:使用ws模块搭建的WebSocket服务器

使用ws模块搭建的WebSocket服务器可以使用第三方库socket.io进行连接和通信,socket.io具有更高级的API,甚至可以自动重连等,下面是一个示例:

const io = require('socket.io-client');
const socket = io('http://localhost:8080');

socket.on('connect', () => {
  console.log('Socket connected.');
  socket.emit('test', 'Hello Server!');
});

socket.on('message', (data) => {
  console.log('Received message: ' + data);
});

socket.on('disconnect', () => {
  console.log('Socket disconnected.');
});

socket.on('error', (error) => {
  console.log('Socket error:', error);
});

这段代码会向我们刚才创建的WebSocket服务器发送一条消息'Hello Server!',并在收到服务器的回复时打印消息内容。在此之前,需要安装和引入socket.io-client库。

以上就是使用Node.js搭建WebSocket服务器的完整攻略和两个示例的详细讲解,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用nodejs搭建websocket服务器 - Python技术站

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

相关文章

  • Egg.js 中 AJax 上传文件获取参数的方法

    Egg.js 作为一个基于 Node.js 的企业级开发框架,提供了很多便捷的 API 和插件。在实际开发中,我们很多时候需要使用上传文件的功能。本文将介绍在 Egg.js 中通过 AJAX 方式上传文件并获取参数的方法。 上传文件 在 Egg.js 中通过 AJAX 方式上传文件,可以使用 formidable 插件来解析文件。安装该插件只需要在终端执行一…

    node js 2023年6月8日
    00
  • tsconfig.json配置详解

    下面是关于“tsconfig.json配置详解”的完整攻略。 1. 什么是tsconfig.json 在使用TypeScript编写代码时,我们需要根据自己的需求配置编译选项,可以通过命令行参数指定,也可以使用一个配置文件统一管理这些选项,tsconfig.json就是这样一个配置文件。它可以包含多个编译选项,比如目标版本、模块格式、输出目录等等。 2. t…

    node js 2023年6月8日
    00
  • Node.js基础入门之缓存区与文件操作详解

    《Node.js基础入门之缓存区与文件操作详解》是一篇介绍Node.js中缓存区和文件操作的基础内容的教程。本篇攻略主要分为以下几部分: Node.js中的缓存区是什么?如何使用缓存区? Node.js中的文件操作是什么?如何读写文件? 两条示例说明 1.Node.js中的缓存区 1.1 什么是缓存区? 在Node.js中,缓存区指代的是一个用于临时存储数据…

    node js 2023年6月8日
    00
  • 通过V8源码看一个关于JS数组排序的诡异问题

    下面来详细讲解“通过V8源码看一个关于JS数组排序的诡异问题”的完整攻略。 1. 了解排序算法 首先,我们需要了解常见的排序算法,例如快速排序、冒泡排序、插入排序等。了解这些算法可以帮助我们更好地理解JS内置的Array.prototype.sort()方法是如何进行排序的。 2. 查看V8源码 V8是Node.js和Google Chrome浏览器的Jav…

    node js 2023年6月8日
    00
  • node基于async/await对mysql进行封装

    请看下方的完整攻略: 什么是异步/等待(async/await) 异步/等待(async/await)是一种用于处理异步操作的编程模式。在传统的回调函数或者Promise对象中,我们需要使用多个then语句来处理异步任务返回的结果。而使用async/await的方式可以让我们以同步代码的方式来处理异步任务。它可以让我们的代码更加的简单、清晰。 node基于a…

    node js 2023年6月8日
    00
  • 详解nodejs实现本地上传图片并预览功能(express4.0+)

    以下是详解“详解nodejs实现本地上传图片并预览功能(express4.0+)”的完整攻略。 1. 确定目标 本文将讲解如何使用 Node.js 和 Express4.0+ 实现本地上传图片并预览功能。具体来说,我们要实现以下功能: 用户可以在网页上选择一张本地图片,并将其上传至服务器; 上传完成后,网页上会立即显示上传的图片以供用户预览。 2. 编写服务…

    node js 2023年6月8日
    00
  • Node.js数据流Stream之Readable流和Writable流用法

    Node.js数据流Stream之Readable流和Writable流用法 引言 在Node.js中,数据流(Stream)是一种处理数据的抽象接口,可以将数据读入或写出到内存,文件或网络等多种数据源和目标。Stream接口的主要好处是可以分块处理大量的数据,避免一次性将整个数据读入或写出而导致的内存占用和性能问题。其中Readable流和Writable…

    node js 2023年6月8日
    00
  • js中AppendChild与insertBefore的用法详细解析

    关于“js中AppendChild与insertBefore的用法详细解析”,我将会为您提供完整的攻略。 简介 在JavaScript中,我们经常需要操作HTML文档的节点来实现一些动态效果,而在节点操作中,appendChild()和insertBefore()是两个常用的方法。它们可以实现对节点的添加或移动,但用法稍有不同。在本文中,我们将会详细解析这两…

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