学习 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开发的优秀实践

    分享五个Node.js开发的优秀实践: 1. 使用PM2进行进程管理 在开发Node.js应用时,我们需要保证应用始终可用,这时就需要一个进程守护管理器来确保应用的稳定性。PM2就是一款常用的进程管理器。使用PM2可以: 崩溃自动重启 进程数限制 简单的部署工具等 可以使用pm2 log命令方便地查看应用运行日志 示例:在控制台中运行以下命令安装PM2: n…

    node js 2023年6月8日
    00
  • 学习node.js 断言的使用详解

    学习Node.js断言的使用是每个Node.js开发者所必须掌握的技能之一。本文将全面剖析Node.js断言库的使用方法,为读者提供全面且丰富的进阶知识点。 什么是Node.js断言库? 断言库是Node.js标准库中的一个模块,用于编写各种测试用例的断言语句。它的作用是用于将某个条件结果与期望结果进行比较,如果二者不符,则抛出异常。 常见的Node.js断…

    node js 2023年6月8日
    00
  • React diff算法面试考点超详细讲解

    React diff算法是React性能优化中的一个重要环节,它在React Virtual DOM中使用,用于在进行新旧Virtual DOM节点的比较时,将节点差异找出来并进行只更新需要更新的部分,让页面渲染更加高效。在面试中,相关考点会非常重要,本文将从以下几个方面分别进行讲解。 一、React diff算法过程 React diff算法的具体过程如下…

    node js 2023年6月8日
    00
  • 如何将HTML字符转换为DOM节点并动态添加到文档中详解

    将HTML字符转换为DOM节点并动态添加到文档中,可以通过innerHTML属性、createRange和createContextualFragment方法、以及DOMParser接口来实现。 使用innerHTML属性 可以通过innerHTML属性将HTML字符串转换为DOM节点,并将这些节点添加到文档中。 // 获取包含HTML代码的字符串 cons…

    node js 2023年6月8日
    00
  • 使用Jenkins自动化构建工具进行敏捷开发

    使用Jenkins自动化构建工具进行敏捷开发的完整攻略如下: 总览 敏捷开发可以节省大量时间,但是仍然需要重复的工作。Jenkins为这样的任务提供了自动化解决方案。Jenkins是一个持续集成和持续交付的服务器,它可以更快地构建、测试和部署应用程序。 我们可以使用Jenkins来将不同的代码版本结合在一起,构建和部署应用程序,并执行其他一些任务,例如生成文…

    node js 2023年6月8日
    00
  • node将geojson转shp返回给前端的实现方法

    要实现“node将geojson转shp返回给前端”的功能,可以采用以下步骤: 安装相关依赖 在Node.js中,我们可以使用geojson2shp库将GeoJSON文件转换为Shapefile文件。首先需要在命令行中安装该库,命令如下: npm install geojson2shp –save 创建服务器 使用Node.js创建一个简单的服务器,监听前…

    node js 2023年6月8日
    00
  • AngularJS语法详解(续)

    AngularJS语法详解(续)是关于AngularJS的常用语法的进一步讲解和示例展现,下面我将详细介绍这篇文章的完整攻略。 标题 第一步,我们先来看标题。标题是Markdown语法中的一部分,它有6个不同级别,分别用1-6个#号表示。在“AngularJS语法详解(续)”这篇文章中,我们使用了一级标题,写法为: # AngularJS语法详解(续) 其中…

    node js 2023年6月8日
    00
  • 详解vue+nodejs获取多个表数据的方法

    关于“详解vue+nodejs获取多个表数据的方法”的完整攻略,以下是详细步骤和示例说明。 步骤: 创建一个Vue项目: vue create project_name 安装axios和vue-resource: npm install axios vue-resource –save 在main.js中引入Vue和vue-resource: import…

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