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

让我为你介绍一下“学习 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如何充分利用多核cpu

    Node.js是一个基于事件驱动的服务器端JavaScript运行环境,它可以在单线程的情况下处理大量的并发请求,但是在多核CPU的情况下,Node.js并不能充分地利用CPU的性能。因此,在高并发场景下,如何充分利用多核CPU成为了Node.js开发者需要思考的问题。 以下是Node.js如何充分利用多核CPU的完整攻略: 1. Cluster模块 Nod…

    node js 2023年6月8日
    00
  • node中的session的具体使用

    当在Web应用程序中存储用户数据时,会使用会话(Session)来跟踪和维护用户状态。通常情况下,使用session需要在Web框架中配置和使用,但是在Node.js中,我们可以使用一个非常流行的中间件——express-session来实现会话管理。 安装 npm install express-session 使用 在Express应用程序中使用expr…

    node js 2023年6月8日
    00
  • node使用request请求的方法

    下面是关于“node使用request请求的方法”的完整攻略。 什么是request模块 request是一个基于Node.js的 HTTP 客户端请求模块,使用它可以发出 HTTP/HTTPS 请求,处理 API 返回的数据。 安装request模块 使用npm命令安装: npm install request request的使用方法 发送GET请求 下…

    node js 2023年6月8日
    00
  • node.js文件上传处理示例

    下面我会详细讲解一下 “node.js 文件上传处理示例” 的完整攻略。这个示例是用来演示如何使用 node.js 处理文件上传的场景。 前置知识 在学习这个示例之前,需要掌握以下知识: 基本的 node.js 知识 HTTP 协议 基本的 JavaScript 知识 了解文件上传的相关概念 实现方法 使用 node.js 实现文件上传主要使用了以下两个模块…

    node js 2023年6月8日
    00
  • 基于node.js制作简单爬虫教程

    关于“基于node.js制作简单爬虫教程”的完整攻略,我可以提供如下的步骤和示例。 步骤 安装Node.js:在官网上下载对应的安装包,安装完成。 创建项目:在命令行中使用mkdir创建一个项目目录,使用cd进入该目录,使用npm init创建package.json文件。 安装依赖:使用npm install request cheerio安装reques…

    node js 2023年6月8日
    00
  • JS中的二叉树遍历详解

    JS中的二叉树遍历详解 二叉树是一种非常重要的数据结构,它是由节点组成的树形结构,其中每个节点都有不超过两个子节点,分别称为左子节点和右子节点。在JavaScript中,我们通常使用嵌套对象的方式来实现二叉树。 安装 在使用JS实现二叉树遍历之前,我们需要安装一个依赖包:binary-tree。打开终端,输入以下命令进行安装。 npm install bin…

    node js 2023年6月8日
    00
  • 浅谈NodeJs之数据库异常处理

    浅谈NodeJs之数据库异常处理 在NodeJs开发过程中,经常需要对数据库进行增、删、改、查操作。在操作过程中,难免会遇到各种异常情况,如重复插入、删除不存在的数据、修改不存在的数据等,这时我们需要对这些异常做出相应的处理,以保证数据的完整性和程序的稳定性。 异常处理的基本思路 数据库操作是异步的,不能简单地使用try-catch来捕获异常。在NodeJs…

    node js 2023年6月8日
    00
  • webpack+vue.js快速入门教程

    webpack+vue.js快速入门教程 本教程旨在介绍如何在项目中使用 webpack 和 Vue.js。本教程假设你已经了解如何使用基本的 HTML、CSS 和 JavaScript。 1. 安装 Node.js 和 npm Node.js 和 npm 是安装和使用 webpack 的必要条件。 安装 Node.js 和 npm,请参考官方文档:http…

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