Node.js 在 Buffers 对象在数据报的表现交互在 Modules 的实战心得
Buffers 缓存对象
纯 Javascript 对 Unicode 非常友好,但它不太擅长处理二进制数据。处理 TCP 数据流或文件时,必须对二进制数据流进行操作。节点提供了创建、操作和接收二进制数据流的方法。
原始数据保存在 Buffer 类的实例中。缓冲区类似于整数数组,只是它对应于 V8 内存堆外部分配的内存数据段。无法调整缓冲区对象的大小。您可以通过“require('buffer').buffer”使用这个类。缓冲区对象是全局对象。需要为 Buffer 和 Javascirpt 中的字符串对象之间的转换指定编码方法。节点支持以下编码方式:
dgram 数据报
要使用数据包 SOCKETS,您需要调用 require('gram')。数据报通常用于处理 IP/UDP 信息,但数据报也可以用于 UNIX 域套接字事件:“message”函数(msg,rinfo){}当套接字上有新的数据报可用时发出。msg 是一个缓冲区,rinfo 是一个对象,包含发送方的地址信息和数据报中的字节数。当 SOCKET 接收到新数据包时,会触发此事件。msg 是一个缓冲区变量,rinfo 是一个包含发送方地址信息和数据报字节长度的对象事件:“倾听”
从 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 域数据包服务器回显接收到的信息的示例:
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 模式。它类似于简化的电子邮件行编辑模式。
执行 REPL 时,可以输入 Control+D 退出。也可以输入跨多行的表达式。特殊标量“_”(下划线)执行后保存最后一个表达式的值。
Modules 模块
Node 使用 CommonJS 的模块系统。Node 还有一个简单的模块加载系统。在 Node 的世界中,文件和模块是一对一的。例如,下面的程序 foo Js 将向您展示如何在同一目录 Js 模块中加载圆。foo 的内容。js:foo。Js 代码:
net.Stream TCP 流模块
此对象是 TCP 或 UNIX SOCKET 的抽象。它实现了全双工流接口。网流可以由用户手动创建并用作客户端(和 connect()),也可以由节点创建并通过服务器的“连接”事件传递给用户。(注意:例如,http.Server 的连接事件将把 net.Stream 的实例作为参数传递给响应函数)net Stream 实例将发出以下事件:
构造一个新的流对象并打开到指定端口和主机的流。如果未写入第二个参数,则假定主机为 localhost
版权声明: 本文为 InfoQ 作者【黎燃】的原创文章。
原文链接:【http://xie.infoq.cn/article/39ee2b39b1156a2b9d48c9c63】。文章转载请联系作者。
评论