res.write() 正在发送连接数据

问题描述

我正在使用一个快速节点服务器,我想在客户端以块的形式接收响应。但我正在接收连接数据,就像我在服务器端和每个索引处都有一个循环一样,我正在像这样执行 res.write(index)

    for(let index = 0; index <= 10; index+){
       res.write(index)
    }

但不是在每次收到响应时在客户端获取单个索引,而是将所有先前的响应连接起来,例如第一次我得到 1.第二次我得到 12.第三次我得到 123 等等。 在客户我收到这样的资源

    axios.post(url,body,{
        onDownloadProgress: progressEvent => {
        const dataChunk = progressEvent.currentTarget.response;
        //chunky response here
        //here i am getting concatenated data
    );
        },timeout: 600000
    })
        .then((response) => {
              //final response here
             })

解决方法

服务器的流可以以它认为合适的任何方式聚合块,并且客户端也可以自由地缓冲它们,因此您不会以这种方式获得每条消息的语义。有关您可能遇到的其他问题的示例,请参阅此 SO 问题:How to flush chunks of arbitrary sizes in NodeJS

如果您希望向客户端发送单独的消息,您有多种选择:

  • 使用可流式传输的数据格式,例如 YAML(带有文档分隔符)或 XML(以及客户端上的流式解析器)
  • 使用更合适的协议:Server-Sent EventsWebSocket
  • 使用跨传输消息传递库,例如 socket.io