Node.js在Buffers对象在数据报的表现交互在Modules的实战心得

简介: Node.js在Buffers对象在数据报的表现交互在Modules的实战心得

@[toc]

Buffers 缓存对象

在这里插入图片描述

纯Javascript对Unicode非常友好,但它不太擅长处理二进制数据。处理TCP数据流或文件时,必须对二进制数据流进行操作。节点提供了创建、操作和接收二进制数据流的方法。

'ascii' - 应用于7位的ASCII 数据。这种编码方式速度很快,它会删除字节的高位。
'utf8' - Unicode 字符。许多网页和其他文档使用UTF-8。
'binary' - 一种只使用每个字符前8个字节将原始的二进制数据编码进字符串的方式。
这个方式已经废弃,应当尽量使用buffer 对象。这个编码将会在未来的node 中删除。

原始数据保存在Buffer类的实例中。缓冲区类似于整数数组,只是它对应于V8内存堆外部分配的内存数据段。无法调整缓冲区对象的大小。您可以通过“require('buffer').buffer”使用这个类。
缓冲区对象是全局对象。
需要为Buffer和Javascirpt中的字符串对象之间的转换指定编码方法。节点支持以下编码方式:

str = "node.js",
buf = new Buffer(str.length),
i;
for (var i = 0; i < str.length ; i += 1) {
buf[i] = str.charCodeAt(i);
}
console.log(buf);

dgram 数据报

要使用数据包SOCKETS,您需要调用require('gram')。数据报通常用于处理IP/UDP信息,但数据报也可以用于UNIX域套接字
事件:“message”函数(msg,rinfo){}当套接字上有新的数据报可用时发出。msg是一个缓冲区,rinfo是一个对象,包含发送方的地址信息和数据报中的字节数。
当SOCKET接收到新数据包时,会触发此事件。msg是一个缓冲区变量,rinfo是一个包含发送方地址信息和数据报字节长度的对象
事件:“倾听”

function () { }
var dgram = require('dgram'),
message = new Buffer("A message to log.");
client = dgram.createSocket("unix_dgram");
client.send(message, 0, message.length, "/var/run/syslog",
function (err, bytes) {
if (err) {
throw err;
}
console.log("Wrote " + bytes + " bytes to socket.");
});

从MESSAGE中偏移量为0的位置开始,长度为MESSAGE。通过/var/run/syslog发送这些length内容后,将调用CALLBACK。如果出现错误,将引发异常。否则,控制台日志实际发送了多少字节。
dgram。send(buf,offset,length,port,address,[callback])
对于UDPSOCKETS,必须指定目标端口和IP地址。您可以使用字符串指定地址参数,该参数可以通过DNS解析。CALLBACK可以用作检测任何DNS错误以及是否重复使用BUF的选项。请记住,DNS搜索至少会将SEND操作延迟到下一个执行时间段。确认发送操作已发生的唯一方法是使用CALLBACK

dgram.bind(path)

它仅在Unxi DOMAIN DATAGRAM SOCKET中用于开始侦听来自指定路径上的SOCKET的数据报。请记住,客户端可以直接调用SEND()而不是BIND(,但如果没有BIND),则无法接收任何信息。
以下是使用UNIX域数据包服务器回显接收到的信息的示例:

var dgram = require("dgram");
var serverPath = "/tmp/dgram_server_sock";
var server = dgram.createSocket("unix_dgram");
server.on("message", function (msg, rinfo) {
console.log("got: " + msg + " from " + rinfo.address);
server.send(msg, 0, msg.length, rinfo.address);
});
server.on("listening", function () {
console.log("server listening " + server.address().address);
})
server.bind(serverPath);

dgram.close()
此方法关闭非延迟SOCKET并停止侦听其上的数据。即使未调用BIND()方法UDP SOCKET,它也会自动侦听消息。
dgram.address()
返回包含SOCKET地址信息的对象。对于UDP SOCKETS,此对象将包含地址和端口。对于UNIX DOMAIN SOCKETS,此对象仅包含地址。
dgram.setBroadcast(标志)
设置或清除SO_ BROADCAST选项。设置此选项后,UDP数据包可以发送到本地接口的广播地址。
dgram.setTTL(ttl)
设置IP_ TTL是“生存时间”选项。然而,在这种情况下,它还可以指定IP的HOPS(转发数据包时每个节点的消耗量。如果Hop限制消耗量达到0,数据包将被取消),以确定数据包允许通过多少节点。每通过一个路由器或网关,TTL值就会降低。如果路由器将TTL减为0,则数据报将不会继续转发。当TTL值用作网络探测器或数据多播时,通常修改TTL值以将HOPS值从1设置为255。大多数系统将默认为64

REPL 交互执行

节点的“读取、运行和输出循环模式(REPL)”可以独立执行,也可以轻松嵌入其他程序中。REPL提供了一种交互执行Javascript并查看结果的模式。此模式可用于调试、测试或仅用于一些新功能。
如果在没有任何参数的情况下直接执行节点,则将进入REPL模式。它类似于简化的电子邮件行编辑模式。

mjr:~$ node
Type '.help' for options.
node> a = [ 1, 2, 3];
[ 1, 2, 3 ]
node> a.forEach(function (v) {
... console.log(v);
... });
1
2
3

执行REPL时,可以输入Control+D退出。也可以输入跨多行的表达式。特殊标量“_”(下划线)执行后保存最后一个表达式的值。

node> [ "a", "b", "c" ]
[ 'a', 'b', 'c' ]
node> _.length
3
node> _ += 1
4

Modules 模块

Node使用CommonJS的模块系统。Node还有一个简单的模块加载系统。在Node的世界中,文件和模块是一对一的。例如,下面的程序foo Js将向您展示如何在同一目录Js模块中加载圆。
foo的内容。js:foo。Js代码:

var circle = require('./circle');
console.log( 'The area of a circle of radius 4 is '
+ circle.area(4));

net.Stream TCP流模块

此对象是TCP或UNIX SOCKET的抽象。它实现了全双工流接口。网流可以由用户手动创建并用作客户端(和connect()),也可以由节点创建并通过服务器的“连接”事件传递给用户。(注意:例如,http.Server的连接事件将把net.Stream的实例作为参数传递给响应函数)net Stream实例将发出以下事件:

function () { }
net.createConnection(port, host='127.0.0.1')

构造一个新的流对象并打开到指定端口和主机的流。如果未写入第二个参数,则假定主机为localhost

相关文章
|
7月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
2月前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
98 23
|
7月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
7月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
77 1
JavaScript中对象的数据拷贝
|
7月前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
7月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
328 0
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
8月前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
134 0
|
JavaScript 数据库 数据安全/隐私保护
|
4月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
3月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
1855 23
下一篇
oss创建bucket