学习 NodeJS 第八天:Socket 通讯实例

yizhihongxing

让我为你介绍一下“学习 NodeJS 第八天:Socket 通讯实例”的完整攻略。

简介

本文将介绍 Socket 通讯实例以及如何使用 Socket 建立通信。

Socket 通讯实例

建立 Socket 服务器

要建立一个 Socket 服务器,你需要使用 net 模块。下面是一些示例代码:

const net = require('net');

const server = net.createServer((socket) => {
  socket.write('Echo server\r\n');
  socket.pipe(socket);
});

server.listen(8000, '127.0.0.1');

在以上示例中,我们使用 createServer 方法创建了一个服务器实例,该方法返回 net.Server 实例。当一个新的客户端连接到服务器时,服务器会调用传递给 createServer 方法的回调函数。在本例中,我们简单地把接收到的所有消息发送回客户端。

建立 Socket 客户端

要建立一个 Socket 客户端,你可以使用 net 模块的 connect 方法。下面是一些示例代码:

const net = require('net');

const client = net.connect({ port: 8000 }, () => {
  console.log('connected to server!');
  client.write('world!\r\n');
});

client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});

client.on('end', () => {
  console.log('disconnected from server');
});

在以上示例中,我们使用 connect 方法连接到服务器,并发送一些数据。当数据发送成功后,服务器会将相应的数据发送回客户端并触发 data 事件。在 data 事件处理函数中,我们简单地打印服务器发送回的消息,然后关闭连接。

示例说明

下面是两个使用 Socket 进行通讯的示例说明:

示例一

一个简单的匿名聊天室,允许多个用户通过 Socket 进行互相交流。

服务器端

const net = require('net');

const server = net.createServer();

server.on('connection', handleConnection);

server.listen(9000, () => {
  console.log('server listening to %j', server.address());
});

function handleConnection(conn) {
  const remoteAddr = conn.remoteAddress + ':' + conn.remotePort;
  console.log('new client connection from %s', remoteAddr);

  conn.setEncoding('utf8');

  conn.on('data', onConnData);
  conn.once('close', onConnClose);
  conn.on('error', onConnError);

  function onConnData(data) {
    console.log('connection data from %s: %j', remoteAddr, data);
    server.getConnections((err, count) => {
      broadcast(`${remoteAddr} says: ${data}`, conn);
      console.log('%d connections currently open', count);
    });
  }

  function onConnClose() {
    console.log('connection from %s closed', remoteAddr);
    server.getConnections((err, count) => {
      console.log('%d connections currently open', count);
    });
  }

  function onConnError(err) {
    console.log('connection %s error: %s', remoteAddr, err.message);
  }
}

function broadcast(message, conn) {
  server.clients.forEach((client) => {
    if (client !== conn) {
      client.write(message);
    }
  });
}

以上示例代码中,我们使用 createServer 创建了一个服务器实例,并监听 connection 事件。当一个新的客户端连接到服务器时,回调函数 handleConnection 将被调用。

handleConnection 函数中,我们记录下客户端的远程地址,并将该连接的编码格式设置为 utf8。

然后,我们监听该连接的 data 事件,当事件发生时,我们将发送来的消息打印在控制台上,然后将它广播给其他连接。广播使用 broadcast 函数实现。

最后,当连接断开时,我们调用 onConnClose 函数,打印相关的日志。在打印完日志后,我们检查当前有多少打开的连接,以便于系统运维。

客户端

const net = require('net');

const client = net.connect({ port: 9000 }, () => {
  console.log('connected to server!');
});

client.setEncoding('utf8');

client.on('data', (data) => {
  console.log(data);
});

client.on('end', () => {
  console.log('disconnected from server');
});

process.stdin.on('data', (data) => {
  client.write(data);
});

以上示例代码中,我们使用 net.connect 方法连接到服务器。一旦连接成功,我们记录下该事件,并获取控制台的输入。在每次按下回车键时,用户输入会被发送到服务器。

示例二

一个流量转发程序,允许将数据从一个端口流转发到另一个端口。

服务器端

const net = require('net');

const server = net.createServer((from) => {
  const to = net.connect(8000, 'localhost');
  from.pipe(to);
  to.pipe(from);
});

server.listen(9000, () => {
  console.log('server listening on %j', server.address());
});

以上代码实现了一个端口转发程序。当一个客户端连接到该服务器时,当前连接的数据将被立即发送到本地 8000 端口上。该端口上运行的程序将对数据进行处理,然后将回应发送回当前连接。所有的回应数据将通过当前连接被转发回客户端。

客户端

const net = require('net');

const client = net.connect(9000, () => {
  console.log('client connected');
});

client.pipe(process.stdout);

process.stdin.pipe(client);

以上代码实现了一个客户端,用于连接到转发服务,客户端向服务器发送数据,并将服务器回复打印到控制台上。

章节总结

本文介绍了 Socket 的基本概念以及如何使用 Node.js 构建一个 Node Socket 服务器。我们还通过两个示例代码,演示了如何使用 Socket 进行通讯。希望本文内容对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习 NodeJS 第八天:Socket 通讯实例 - Python技术站

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

相关文章

  • Node.js使用Koa搭建 基础项目

    下面我会详细讲解“Node.js使用Koa搭建基础项目”的完整攻略。 1. 安装Node.js和npm 如果您还没有安装Node.js和npm,可以前往官网 https://nodejs.org/ ,选择适合您操作系统的版本进行下载和安装。 2. 初始化项目 在命令行中使用以下命令来创建一个新的项目,例如名为“koa-demo”: $ mkdir koa-d…

    node js 2023年6月8日
    00
  • Node.js之网络通讯模块实现浅析

    Node.js之网络通讯模块实现浅析 简介 Node.js是基于V8引擎的JavaScript运行环境,它具有事件驱动、异步I/O等特点,使其成为一个非常适合构建高性能网络应用程序的工具。Node.js提供了许多用于处理网络通讯的模块,本文将对其中的几个模块进行浅析,介绍它们的用途和实现方法。 net模块 net模块是Node.js中用于处理TCP网络通讯的…

    node js 2023年6月8日
    00
  • Node.js卸载与重装及zip与msi安装详解

    Node.js卸载与重装及zip与msi安装详解 当我们需要重新安装或升级Node.js时,有三个主要的安装方式可以选择,分别是zip包、msi文件和macOS PKG文件。同时,为确保重新安装或升级能成功进行,我们可能需要卸载原有的Node.js版本。 卸载Node.js Windows系统下的卸载 对于Windows系统,卸载Node.js的主要步骤有:…

    node js 2023年6月8日
    00
  • node+vue前后端分离实现登录时使用图片验证码功能

    一、前言 前后端分离的应用现在越来越普及,如何实现前后端分离并且实现一些常见的功能逐渐成为一个必须要掌握的技能。 其中注册和登录是所有网站必备的功能。而且在现在的互联网环境中,为了防止恶意攻击等一些非法行为,很多站点都会在登录时使用验证码的方式进行验证。 那么,在本篇文章中,我们就来详细讲解一下如何在node和vue的前后端分离项目中实现登录时使用图片验证码…

    node js 2023年6月8日
    00
  • Angularjs—项目搭建图文教程

    AngularJS 项目搭建图文教程 AngularJS 是一款流行的前端 JavaScript 框架,它可以帮助开发者快速构建单页应用程序。本文将演示如何在自己的电脑上搭建 AngularJS 项目的环境并进行开发。 1. 安装 Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。安装了 Node.js,…

    node js 2023年6月8日
    00
  • 使用Phantomjs和Node完成网页的截屏快照的方法

    使用PhantomJS和Node.js可以完成网页截屏快照的功能,下面是详细的攻略。 1. 准备工作 首先需要在本地安装PhantomJS(可以通过官网下载),安装好后需要将其加入环境变量中。 然后使用npm安装依赖的模块,包括phantom和fs: npm install phantom –save npm install fs –save 2. No…

    node js 2023年6月8日
    00
  • node.js回调函数之阻塞调用与非阻塞调用

    当我们在node.js中执行一个耗时操作时,例如读取文件、请求网络数据等,会出现执行时间较长的情况,这会导致整个程序阻塞,影响程序的性能。为了解决这个问题,Node.js采用了回调函数的机制来实现非阻塞调用。 阻塞调用 阻塞调用是指应用程序在执行一个函数时,必须等待该函数执行完成,才能继续执行后面的代码。当我们在node.js中进行文件读取时,如果使用阻塞调…

    node js 2023年6月8日
    00
  • Node.js中流(stream)的使用方法示例

    以下是Node.js中流的使用方法示例的完整攻略。 什么是流? 流是Node.js中许多模块所使用的核心概念之一,它是一种用于处理大量数据的技术。流是将数据拆分为小块一次一块地处理,而不是一次将整个数据处理完成。这样可以减少内存的使用,提高处理效率。 流的类型 Node.js中有四个流的类型,分别是:可读(Readable)、可写(Writable)、可读可…

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