首页
学习
活动
专区
圈层
工具
发布

第七十七期:Node中的streams流(pipe管道和pump泵)

我们其实也可以处理无限量的数据,比如:我们可以从伪随机数生成器中读取字节数。...当可读流中没有数据时触发。 第三,finish事件。当可写流结束且所有挂起的写入都已完成时发出。 第四,close事件。通常在流完全关闭时发出,stream不一定会触发事件。 第五,puse事件。...但是不好的一点是它的错误处理。假如管道流中有一个流出现错误,它往往直接取消管道连接,然后将剩余的流进行销毁。这样一来,他们就不会泄露资源,但是有可能会导致内存泄露。...如果http响应在文件被完全传输给用户之前关闭,文件相关的一些信息肯定会泄露,以及文件流也会产生一些内存开销,文件流也会留在内存中,因为我们没有关闭它。...比如关闭,错误处理以及在不影响其他流的情况下关闭另外一个流的方法。 如果其中一个流关闭,其他流将被销毁,并调用传递给pump的回调函数。

1.4K30

TCP之深入浅出send&recv

,send就一直等待协议把s的发送缓冲中的数据发送完 如果len小于剩余空间大小,send就仅仅把buf中的数据copy到剩余空间里。...如果send函数copy数据成功,就返回实际copy的字节数,如果send在copy数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时网络断开的话,那么send...数据链路层 数据链路层在不可靠的物理介质上提供可靠的传输。该层的功能包括:物理地址寻址、数据成帧、流量控制、数据错误检测、重发等。这一层的数据单位称为帧(frame)。...socket: 接收主机作为主动关闭者,连接将处于FIN_WAIT1的半关闭状态(等待对方的ack).然后,发送应用程序会收到socket可读的信号(通常是 select调用返回socket可读),但在读取时会发现...recv函数返回0,这时应该调用close函数来关闭socket(发送给对方ack); 如果发送应用程序没有处理这个可读的信号,而是在send,那么这要分两种情况来考虑,假如是在发送端收到RST标志之后调用

6.1K72
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NIO之Channel通道(三)-DatagramChannel

    该数据报被传输到给定的字节缓冲区中,并从缓冲区的当前位置开始存储,如同正规的read操作一样。如果缓冲区中的剩余字节空间小于保存数据报所需的空间,则丢弃余下的数据报。...参数:dst-要向其中传输数据报的缓冲区 返回:数据报的源地址,或者如果此通道处于非阻塞模式并且没有直接可用的数据报,则返回null 抛出: ClosedChannelException-如果此通道已关闭...,因此关闭了该通道并将当前线程设置为中断状态 SecurityException-如果已安装安全管理器并且它不允许接受该数据报发送者所发送的数据报 IOException-如果发生其他I/O错误 1.8send...从字节缓冲区传输数据报如同通过正规的write操作一样。 此方法执行的安全检查与DatagramSocket类的send方法执行的安全检查完全相同。...仅在此通道的套接字已连接时才调用此方法,并且此方法仅接受来自该套接字同位体的数据报。如果数据报中的字节数大于给定缓冲区中的剩余空间,则丢弃余下的数据报。

    1.2K20

    如何在Ubuntu 16.04上将日志模块添加到Nginx

    让我们使用truncate创建一个在默认Nginx目录中命名为1mb.test的1兆字节文件。...sudo truncate -s 1M /var/www/html/1mb.test 类似地,我们再创建两个不同大小的文件,首先是10兆字节,然后是100兆字节,并相应地命名它们。...请求在Thu, 30 Jun 2016 18:10:15 GMT已处理完毕。 让我们看看这是否与Nginx在其访问日志中存储的内容相匹配。日志文件只能由管理用户读取,因此必须使用sudo来访问它们。...HTTP Referer标头是单词“referrer”的拼写错误,它可以追溯到HTTP的起源并且是HTTP标准的一部分。 该用户代理,在这里是curl。...://localhost/10mb.test curl -i http://localhost/100mb.test 您会注意到每个后续命令将花费更长的时间来执行,因为文件变大所以传输它们需要更多时间。

    90300

    Linux curl 命令详解

    常用选项一 curl通常在操作过程中显示一个进度表,显示传输的数据量、传输速度和估计的剩余时间等。...给定的偏移量是将被跳过的确切字节数,从源文件的开头开始计算,然后再将其传输到目标文件。 使用 “-C -“「注意有空格和无空格的情况」,告诉curl自动找出在哪里/如何恢复传输。...此标志将阻止curl输出该值并返回错误22。...-g, --globoff 这个选项关闭了“URL全局解析器”。当您设置这个选项时,您可以指定包含字母 {}[] 的url,而不需要curl本身来解释它们。...附加 “k” 或 “K” 表示千字节, “m” 或 “M” 表示兆字节,而 “g” 或 “G” 表示千兆字节。例如:200K, 3m和1G。 给定的速率是整个传输过程中计算的平均速度。

    40.7K65

    实战记录—PHP使用curl出错时输出错误信息

    CURL错误列表 curl_exec($ch);//执行curl if (curl_errno($ch)) { echo 'Curl error: ' . curl_error($ch);//出错输出错误...} curl_close($ch);//关闭curl 同理,像正则,Json,数据库这些出错时基本都会有提供有帮助的错误信息 CURL状态码列表 状态码 状态原因 解释 0 正常访问 1 错误的协议...无法改变传输方式到二进制。 18 文件传输短或大于预期 部分文件。只有部分文件被传输。 19 RETR命令传输完成 FTP 不能下载/访问给定的文件, RETR (或类似)命令失败。...72 未知TFTP传输的ID 未知TFTP 传输编号(ID)。 73 文件已经存在 文件已存在(TFTP) 。 74 错误TFTP服务器 无此用户(TFTP) 。 75 字符转换失败 字符转换失败。...79 错误发生在SSH会话 SSH 会话期间发生一个未知错误。 80 无法关闭SSL连接 未能关闭SSL 连接。

    10.6K50

    如何在Debian 8上将log日志模块添加到Nginx

    当Nginx(或任何其他Web服务器)收到文件的HTTP请求时,它会打开该文件并通过网络传输其内容将其提供给用户。文件越小,传输速度越快。当文件完全传输时,该请求被认为是完整的,然后才会传输记录。...让我们使用truncate在默认Nginx目录中创建一个命名1mb.test的1兆字节文件。...$ sudo truncate -s 1M /var/www/html/1mb.test 相同地,让我们再创建两个不同大小的文件,先是10兆字节然后是100兆字节并命名它们。...请求已在Fri, 09 Dec 2016 23:05:18 GMT上处理完毕。 让我们看看这是否与Nginx在其访问日志中存储的内容相匹配。...HTTP Referer报头是单词“referrer”的拼写错误,它可以追溯到HTTP的起源并且是HTTP标准的一部分。 用户代理,在这里是curl。

    55310

    入门 Node.js Net 模块构建 TCP 网络服务

    TCP 是传输控制协议,大多数情况下我们都会使用这个协议,因为它是一个更可靠的数据传输协议,具有如下三个特点: 面向链接: 需要对方主机在线,并建立链接。...面向字节流: 你给我一堆字节流的数据,我给你发送出去,但是每次发送多少是我说了算,每次选出一段字节发送的时候,都会带上一个序号,这个序号就是发送的这段字节中编号最小的字节的编号。...如果有连接存在,直到所有的连接结束才会触发这个事件 error:捕获错误,例如监听一个已经存在的端口就会报 Error: listen EADDRINUSE 错误 TCP 链接事件方法 data: 一端调用...方案一:延迟发送 方案二:关闭 Nagle 算法 方案三:封包/拆包 方案一:延迟发送 一种最简单的方案是设置延迟发送,sleep 休眠一段时间的方式,但是这个方案虽然简单,同时缺点也显而易见,传输效率大大降低...buf.readInt32BE([offset]):高位优先读取 32 位整型,offset 为读取之前要跳过的字节数 编码/解码实现 TCP 底层传输是基于二进制数据,但是我们应用层通常是易于表达的字符串

    2.8K30

    软件与驱动工程师必备:SD NAND 闪存(工业级TF卡)开发要点

    三、数据读写:遵循 “块操作” 原则,利用协议简化交互SD NAND 以 “块” 为最小操作单位(通常 512 字节 / 块),读写流程需严格遵循块对齐原则,避免跨块操作导致的数据错误。...(1)数据写入:从缓存到闪存的可靠传输单块写入:发送 CMD24(0x58000000 + 块地址),携带要写入的块地址;通过 SDIO/SPI 接口传输 512 字节数据(需包含 2 字节 CRC 校验...:发送 CMD18(0x55000000 + 起始地址),启动连续读取;循环接收数据块,直至所有数据传输完成;发送 CMD12 停止读取。...),可重试初始化流程,检查电源电压是否稳定;l CRC 错误:数据传输校验失败,通常因信号干扰,建议降低时钟频率或增加信号线屏蔽;l 地址错误:写入 / 读取地址超出范围,需在驱动中添加容量校验(通过...,开箱即用;Smart 功能:通过专用命令可读取总写入量、剩余寿命、异常掉电次数等参数,便于驱动层实现健康状态监测;工业级稳定性:10 万次擦写(SLC)、-40℃~85℃宽温设计,驱动无需针对极端环境添加复杂适配逻辑

    48410

    curl命令

    /秒为单位,除非附加后缀,加上k或k将把数字计为千字节,m或m表示兆字节,而g或g表示千兆字节,例如: 200K、3m和1G,给定的速率是整个传输过程中计算的平均速度,这意味着curl可能在短脉冲中使用更高的传输速度...18: 部分文件,只传输了文件的一部分。 19: FTP无法下载/访问给定文件,RETR(或类似)命令失败。 21: FTP报价错误,quote命令从服务器返回错误。...79: SSH会话期间发生未指定的错误。 80: 无法关闭SSL连接。 82: 无法加载CRL文件,缺少或格式错误,在7.19.0中添加。 83: 发卡机构检查失败,在7.19.0中添加。...curl www.baidu.com 使curl显示进度表,以指示传输速率、传输的数据量、剩余时间等。...curl -L http://www.google.com 此选项限制数据传输速率的上限,并将其保持在以字节为单位的给定值附近。

    11K40

    如何在CentOS 7上将日志模块添加到Nginx

    要完成本教程,你需要具备以下内容: 一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。...我们先使用truncate在默认Nginx目录中创建一个命名为1mb.test的1兆字节文件。...sudo truncate -s 1M /usr/share/nginx/html/1mb.test 同样地,我们再创建两个不同大小的文件,第一个是10兆字节,第二个是100兆字节,相应地命名它们。...在Fri, 05 Aug 2016 22:05:03 GMT,请求已处理完毕。 让我们看看这是否与Nginx在其访问日志中存储的内容相匹配。...://localhost/10mb.test curl -i http://localhost/100mb.test 您会注意到每个后续命令将花费更长的时间来执行,因为文件变大并且传输它们需要更多时间。

    1.1K30

    Linux 网络编程:从 Socket API 到极简 Redis 发布订阅 subpub 服务的实现

    关键取值有:SOCK_STREAM: 提供面向连接、可靠的、基于字节流的传输服务。TCP 协议即为此类型,保证数据传输的顺序性和可靠性(通过序列号、确认、重传等机制)。...常见错误包括 EADDRINUSE(地址已在使用)、EACCES(权限不足)、EINVAL(sockfd 无效或已绑定)。...对于监听套接字,可读意味着有新连接待 accept();对于已连接套接字,可读意味着有数据到达、连接已关闭(收到 FIN)或发生错误。...检查 errno: 若 errno 为 EAGAIN 或 EWOULDBLOCK(非阻塞模式下),表示暂时无数据可读,不是错误。..., 0 表示连接已关闭 (收到FIN), 错误 if ((valread = read(sd, buffer, BUFFER_SIZE)) <= 0) {

    41700

    TCP通讯开发注意事项及常见问题解析

    一、TCP协议特性与开发挑战TCP作为面向连接的可靠传输协议,其核心特性包括字节流传输、超时重传、拥塞控制等,但这些特性也带来了独特的开发挑战:无消息边界:TCP将数据视为连续字节流,不保留应用层消息边界...,MSS=1460时会拆分为:第一个包:1460字节(TCP头+数据)第二个包:540字节(TCP头+剩余数据)三、TCP丢包问题全链路分析1....丢包原因分类及案例应用层问题:缓冲区溢出:发送速率超过接收处理能力 // 错误示例:未检查send返回值 socket.getOutputStream().write(largeData); //...= -1) { // 读取剩余数据 process(buf, 0, len); }} finally { socket.close(); // 最终关闭}五、高性能TCP开发优化...conn.send(b'HEARTBEAT') conn.recv(1024) # 等待响应 except: break # 连接已断开

    37810

    grpc:好的部分

    通常,Protobuf 的字段编号仅占 1-2 字节,而 JSON 的字段名可能远超这个大小。 • VARINT 类型优化[4]:小整数即使声明为 int64 也只需 1 字节。...虽然 gRPC 消息前会有少量二进制帧字节(不可读),但如果你真的在意这些,可以参考下文 ConnectRPC[7] 章节。...gRPC 依靠 protobuf 定义,提供了严谨的客户端-服务端契约,带来诸多优势: • 更少错误:明确的数据类型要求减少了数据不匹配的风险。...• 需要持续通信的场景:如游戏、金融数据传输等。 如果你来自网络开发领域,可能知道基于 gRPC 的 gNMI 已取代 SNMP。通过 gNMI 订阅计数器更新,无需每分钟轮询网络设备。...Connect 协议[16]更严格遵循 HTTP 标准,支持如下直观的 curl 调用: curl \ --header "Content-Type: application/json" \

    76510

    curl(1) command

    该标志将阻止 curl 输出该内容并返回错误 22。...--local-port NUM[-NUM] 强制使用本地端口号 -L, --location 如果(HTTP/HTTPS)服务器报告请求的页面已移动到其他位置,此选项将使 curl 在新位置上重做请求...SECONDS 传输出现问题时,设置重试间隔时间 --retry-max-time SECONDS 传输出现问题时,设置最大重试时间 -s, --silent 静默模式,不显示进度表或错误消息。...curl URL --limit-rate 50k 使用 --limit-rate 限制 curl 的下载速度,命令中用 k(千字节)和 m(兆字节)指定下载速度限制。 指定可下载的最大文件大小。...curl URL/File -C OFFSET 偏移量是以字节为单位的整数,如果让 curl 自动推断出正确的续传位置使用: curl -C - URL 连接失败时不显示 http 错误。

    1.1K10

    IO复用——select函数

    连接的读这一半关闭(接收到FIN分节),套接口的读操作将不阻塞并且返回0(即文件结束符)。 套接口是监听套接口且已完成的连接非0。 有一个套接口错误待处理。...准备好写 下面三个条件任意满足一个,套接口准备好写: 套接口发送缓冲区中的可用空间字节数大于等于套接口发送缓冲区低潮限度(默认为2048),且套接口已连接或者套接口不要求连接(例如UDP套接口)。...套接口的写操作将不阻塞并且返回大于0的值(例如传输层接收的字节数)。 连接的写这一半关闭,对这样的套接口的写操作将产生信号SIGPIPE。 有一个套接口错误待处理。...“描述字准备好”总结 对select来说套接口准备好的条件的总结如下, 条件 是否可读 是否可写 是否异常 有数据可读 是 关闭连接的读一半 是 给监听套接口准备好新连接 是 有可用于写的空间...在新版函数str_cli中,由select处理以下条件: 如果对方TCP发送数据,套接口就变为可读且read返回大于0的值(数据字节数)。

    1.3K51

    使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令

    可靠性:Rust 的错误处理机制和内存管理机制使得应用程序更加可靠。 简洁性:Rust 的语法简洁明了,易于学习。...静态类型系统:虽然静态类型有助于增强代码的可维护性和可读性,但也可能会限制代码的灵活性。 二、功能实现 1、代码 依赖 ssh2 ssh2 = “0.9.4” #!...file.read_to_end(&mut buffer).unwrap(); // 读取文件内容 let mut total_bytes_sent = 0; // 已发送的总字节数...(MB) // 记录已发送文件的大小 let mut bytes_sent = 0; // 已发送的字节数 for (i, chunk) in buffer.chunks(PROGRESS_UPDATE_INTERVAL...} total_bytes_sent += bytes_sent; // 更新已发送的总字节数 bytes_sent = 0; // 重置已发送的字节数

    67210
    领券