在节点js中结束后如何保持TCP客户端连接的活动

时间:2020-05-02 05:37:23

标签: node.js tcp

我需要您的帮助...我是TCP的新手。 我已经实现了TCP服务器和客户端...建立连接后,tcp服务器写入数据,等待内核缓冲区变空,然后我从TCPserver发出结束事件,并且与客户端在结束事件中从服务器接收数据相同...

TCP server.js

  const TCPserver = net.createServer().listen(4040);
var recvData='';

TCPserver.on('connection',(TCPclient)=>{
  TCPclient.setKeepAlive(true); 
      console.log(`TCP Client Connected ${TCPclient.localAddress}:${TCPclient.localPort}`);
      var strData=JSON.stringify({"msg":"testRequest from Cortana"})

      var is_buffer_null=TCPclient.write(strData);
        if(is_buffer_null){ 
          TCPclient.end();
         }

        TCPclient.on('data',(data)=>{
        recvData+=data;
     })

     TCPclient.on('end',()=>{
       console.log("Packet is received : "+recvData);
       recvData='';
     })

     TCPclient.on('drain',()=>{
      TCPclient.end();
     })

     TCPclient.on('error',(err)=>{
       console.log(err);
     })

     TCPclient.on('close',(hardError)=>{

       console.log("Client disconnected");
       if(hardError){ console.log("TCP error"); }
     })

})

TCPclient.js

var TCPcortana = net.connect({ port: 4040, host:'127.0.0.1',allowHalfOpen:true},()=>{
  console.log(`server connected to ${TCPcortana.localAddress}:${TCPcortana.localPort} `);
});

  TCPcortana.setKeepAlive(true); 

 TCPcortana.on('data',(data)=>{
    recvData+=data;
 })

 TCPcortana.on('end',()=>{
   console.log("Packet is received : "+recvData);
   processReq(recvData);
    recvData='';  
 })

 TCPcortana.on('drain',()=>{
   TCPcortana.end();
 })

 TCPcortana.on('error',(err)=>{
   console.log(err);
   setTimeout(()=>{
    TCPcortana.connect({ port: 4040, host:'127.0.0.1',allowHalfOpen:true});
   },10000)
 })

 TCPcortana.on('close',(hardError)=>{
   console.log("connection disconnected");
   if(hardError){ console.log("TCP error"); }
 })

function processReq(data) {
  console.log("Packet being processed");
   var stringData=JSON.stringify(data);
 var is_buffer_empty=TCPcortana.write(stringData);
 if(is_buffer_empty){
    TCPcortana.end();

}

}

Tcp客户端发送响应,然后关闭客户端连接,我希望客户端没有关闭,并保持服务器与客户端之间的连接...请帮助我...

1 个答案:

答案 0 :(得分:0)

如果您尝试在不关闭连接的情况下频繁向客户端发送消息,则需要使用服务器发送事件。

服务器已发送事件继续保持连接状态,服务器可以发送包含某些数据的“事件”。

有关更多详细信息,请参见此answer

相关问题