用nodejs搭建websocket服务器

yizhihongxing

使用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日

相关文章

  • Node.js中的缓冲与流模块详细介绍

    Node.js中的缓冲与流模块是Node.js中很重要的概念。在本篇攻略中,我们将会详细解释缓冲和流模块的概念以及它们在Node.js中的作用。 缓冲(Buffer) 缓冲是二进制数据的容器。它在Node.js中是一个全局变量,所以不需要require就可以使用。缓冲的长度一旦被定义就无法改变。可以使用以下方法创建一个缓冲: const buf = Buff…

    node js 2023年6月8日
    00
  • Node.js API详解之 repl模块用法实例分析

    下面我将为您详细解释“Node.js API详解之 repl模块用法实例分析”的完整攻略。 什么是 repl 模块? repl 模块是 Node.js 内置模块之一,它提供了一种类似交互式解释器的环境,可以让开发者在命令行中直接使用 JavaScript 代码来进行测试、调试以及一些其它方便的操作。 repl 模块的核心方法和属性 repl 模块主要有以下核…

    node js 2023年6月8日
    00
  • node.js中的fs.open方法使用说明

    Node.js中的fs.open方法使用说明 简介 fs.open() 方法用于异步地打开文件。 与 fs.openSync() 方法类似,但 fs.open() 方法不会立即将文件打开。 而是返回文件描述符。 这个方法可以被用来打开新的文件,也可以被用来修改一个已打开的文件。 语法 fs.open(path[, flags[, mode]], callba…

    node js 2023年6月8日
    00
  • Node.js API详解之 os模块用法实例分析

    Node.js API详解之 os模块用法实例分析 简介 Node.js是一款基于Chrome V8引擎的JavaScript开发的服务器端运行环境,提供了许多实用的内置模块,其中os模块是其中之一。 os模块提供了与操作系统相关的一些方法,例如获取系统信息、处理文件路径、获取CPU和内存相关信息等。 应用方法 1. os.arch() os.arch()方…

    node js 2023年6月8日
    00
  • Egg.js 中 AJax 上传文件获取参数的方法

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

    node js 2023年6月8日
    00
  • ES10 特性的完整指南小结

    ES10 特性的完整指南小结 ECMAScript 2019 (ES10) 是Javascript的第十代标准,为Javascript增加了一些新的特性和语法。本文将对ES10的主要新增特性进行介绍。 Array.prototype.flat() Array.prototype.flat() 方法可以将一个多维数组变成一个一维数组。它接收一个可选参数dept…

    node js 2023年6月8日
    00
  • Nodejs下使用gm圆形裁剪并合成图片的示例

    下面是详细讲解Nodejs下使用gm圆形裁剪并合成图片的完整攻略。 1. 确认GM库是否安装 在使用GM库之前,需要确认该库已被正确安装。可以使用以下命令进行确认: gm version 如果GM库已被正确安装,则会输出以下信息: GraphicsMagick 1.3.36 2018-04-22 Q16 http://www.GraphicsMagick.o…

    node js 2023年6月8日
    00
  • vue中v-if和v-show使用区别源码分析

    这里为你详细讲解“vue中v-if和v-show使用区别源码分析”的完整攻略。 1. v-if 和 v-show 的使用区别 在Vue中,v-if和v-show的主要区别在于初始渲染时是否会被渲染出来。 v-if:如果表达式的值为false,则元素根本不会被渲染到页面中,只有在表达式的值为true时,元素才会被渲染到页面中。 v-show:无论表达式的值是t…

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