как сохранить соединение с клиентом TCP после завершения в node js - PullRequest
0 голосов
/ 02 мая 2020

мне нужна твоя помощь ... я новичок в TCP ... я внедрил TCP-сервер и клиент ... tcp-сервер записывает данные, когда соединение установлено, и ждет, пока кернальный буфер опустеет, затем я посылаю событие завершения из TCPserver и так же, как клиент получил данные от сервера в конечном событии ...

TCP-сервер. 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 голосов
/ 02 мая 2020

Если вы пытаетесь часто отправлять сообщения клиенту, не закрывая соединение, вам необходимо использовать события отправки на сервер.

События, отправленные сервером, продолжают поддерживать соединение, и сервер может отправлять «события» содержащие некоторые данные.

Подробнее см. ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...