在 Node.js 中从客户端向服务器发送 HTTP2 中的多个 JSON 数据

苏拉·库马尔

我有一个工作的 http2 服务器和客户端,我使用 POST 方法将 JSON 数据从客户端发送到服务器。由于 Node.js 中的 http2 具有双工流,我使用事件 'data' 和 'end' 从服务器流中读取数据。现在我想多次发送相同的数据。但是如何区分新数据和旧数据呢?

我想使用 sleep 来做到这一点,因为(如果我错了,请纠正我)当我们从客户端向服务器发送许多数据包时,它最终会耗尽我所有的 CPU 资源。现在服务器中的流事件在没有接收到数据(我的意思是 'data' 和 'end')时将如何表现,我将如何再次使用它们来获取数据?假设当服务器接收到数据时,它会将其存储在一个文件中。

服务器:

const h2=require('http2');
const fs=require('fs');
const options={
    key: fs.readFileSync('key.pem'),
    cert: fs.readFileSync('cert.pem')
};
//server begin
const server=h2.createSecureServer(options);
server.on('error', (err)=>{throw err});

server.on('stream', (stream, headers)=>{        
    stream.respond({':status': 200})        //giving out response headers
    if(headers[':method']==='POST'){
        let data=''     
        let i=0;   
        stream.on('data',(chunk)=>{
            console.log(`iteration: ${++i}`)
            data+=chunk
        });
        stream.on('end', ()=>{
            // stream.close()      
            console.log('\n')
            console.log(JSON.parse(data))
        })
    }else if(headers[':method']==='GET'){
        stream.end('Hello from SMF')
    }else{
        //else condition
    }
})
server.listen(3000, 'localhost');
//server end

客户:

const h2=require('http2');
const fs=require('fs');
const packet=require('./packet.json');

//client start
const client=h2.connect('https://localhost:3000',{      //establishing connection
    ca: fs.readFileSync('cert.pem')
});
client.on('error', (err)=>{throw err})

const req=client.request({              //giving out a post request
    ':method': 'POST',
    'content-type': 'application/json'
})
req.setEncoding('utf8');
req.on('error', (err)=>{throw err})

// req.write(JSON.stringify(packet))


req.end(JSON.stringify(packet), ()=>{   //writing the data to SMF
    req.on('response', (headers)=>{     //getting the response headers
        if(headers[':status']===200) console.log('success')
        req.close()                     //closing client stream
        client.close()                  //closing client session
    })
})
//client end

JSON 数据:

{
  "supi": "imsi-<IMSI>",
  "pduSessionId": 235,
  "dnn": "<DNN>",
  "sNssai": {
    "sst": 0
  },
  "servingNfId": "<AMF Identifier>",
  "n1SmMsg": {
    "contentId": "n1msg"
  },
  "anType": "3GPP_ACCESS",
  "smContextStatusUri": "<URI>"
}

(我知道我使用了安全服务器,您可以从代码中删除证书并使用 createServer() 代替)。

苏拉·库马尔

我在 javascript 中使用 TimeInterval 解决了这个问题......

i=0;
let timer=setInterval(()=>{
    i++;
    req.write(JSON.stringify(packet));          //sending request packet
    if(i==5){                                   //no of packets
        req.end(()=>{
             req.close();
             client.close();
        })
        clearInterval(timer);
    } 
}, 10)                                          //time interval

我能够使用这个发送多个文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Handlebars(客户端)中打印从Node JS服务器发送的JSON对象数组?

如何从节点js服务器向客户端发送json数据?

Node.js和Express:如何通过response.send()从服务器向客户端发送多个Json变量

Node.js客户端看不到Express服务器中的数据

如何在Node.js服务器上的多个客户端之间同步数据

在Node.js / Express.js中,如何将JSON对象从服务器传输到客户端?

如何在 Node.js 中从客户端获取数据到服务器(不带 url 参数)?

将数据从Java客户端发送到Node.js服务器

在Node.js客户端/服务器中通过TCP发送查询结果时出现问题

在Node js中读取多个文件并发送JSON数据

在Node.JS中向客户端发送通知

在node.js中从服务器端调用客户端函数

Next.js:在getInitialProps()中获取数据:服务器端与客户端

如何使用客户端JavaScript从MongoDB和没有框架的Node.js服务器中查找并返回数据?

从Node JS Socket客户端向MINA套接字服务器发送消息

如何使用node.js将表单数据从客户端脚本发送到服务器脚本

如何将数据从客户端的html发送到node.js服务器?

客户端JS向nodejs express服务器发送数据并响应

服务器如何识别HTTP2中不同客户端的头部压缩

客户端中的关闭套接字使Node.js服务器崩溃

Dart lang,在客户端中处理服务器返回的JSON数据

我无法更新HTTP2实现中的流控制窗口,因此客户端无法发送其余数据

获取客户端javascript代码中可用的node.js服务器端对象

如何在Node.js中从客户端调用服务器端函数(例如html按钮onclick)?

如何在node.js服务器上的多个客户端之间同步数据库文件而不下载那些已经下载的文件?

Node.js:服务器和客户端之间的数据交换

Node.js WebSockets客户端-服务器数据包

如何在Node.js HTTP2中获取请求正文?

gRPC 中数据如何从客户端发送到(多服务)服务器