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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 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

相关文章
|
28天前
|
监控 安全 中间件
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
这篇文章介绍了什么是Next.js中的中间件以及其应用场景。中间件可以用于处理每个传入请求,比如实现日志记录、身份验证、重定向、CORS配置等功能。文章还提供了一个身份验证中间件的示例代码,以及如何使用限流中间件来限制同一IP地址的请求次数。中间件相当于一个构建模块,能够简化HTTP请求的预处理和后处理,提高代码的可维护性,有助于创建快速、安全和用户友好的Web体验。
|
1月前
|
存储 安全 API
Next.js 实战 (九):使用 next-auth 完成第三方身份登录验证
这篇文章介绍了next-auth,一个为Next.js设计的身份验证库,支持多种认证方式,如电子邮件和密码、OAuth2.0提供商(如Google、GitHub、Facebook等)以及自定义提供商。文章包含了如何配置Github Provider以及会话管理,并提到了适配器Adapters在next-auth中的作用。最后,文章强调了next-auth的强大功能值得进一步探索。
74 10
|
1月前
|
中间件 API
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
这篇文章介绍了作者在使用Nextjs15进行项目开发时遇到的部署问题。在部署过程中,作者遇到了打包构建时的一系列报错,报错内容涉及动态代码评估在Edge运行时不被允许等问题。经过一天的尝试和调整,作者最终删除了lodash-es库,并将radash的部分源码复制到本地,解决了打包报错的问题。文章最后提供了项目的线上预览地址,并欢迎读者留言讨论更好的解决方案。
41 10
|
1月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
90 33
|
1月前
|
JavaScript 前端开发 API
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
|
2月前
|
前端开发 API 开发者
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
|
2月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
548 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
存储 网络架构
Next.js 实战 (四):i18n 国际化的最优方案实践
这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
105 5
|
2月前
Next.js 实战 (三):优雅的实现暗黑主题模式
这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。
|
2月前
Next.js 实战 (二):搭建 Layouts 基础排版布局
本文介绍了作者在Next.js v15.x版本发布后,对一个旧项目的重构过程。文章详细说明了项目开发规范配置、UI组件库选择(最终选择了Ant-Design)、以及使用Ant Design的Layout组件实现中后台布局的方法。文末展示了布局的初步效果,并提供了GitHub仓库链接供读者参考学习。
Next.js 实战 (二):搭建 Layouts 基础排版布局

热门文章

最新文章