首页 > 解决方案 > 在实时应用程序中反应本机 udp 问题

问题描述

我正在尝试通过 react-native-udp 开发一个反应原生实时应用程序。在我的应用程序中,每 500 毫秒发送和接收数据包有一个间隔。有时用户发送和接收数据包之间的间隔。可能是两个数据包一起发送。

我有一些问题:

我不知道为所有数据包创建一个套接字是否更好(或可能)?当我为所有数据包创建一个套接字时,应用程序在第一个数据包后停止发送数据包。可能是我没有以正确的方式开发它。

如果我为每个数据包创建一个套接字并在收到数据包后关闭套接字,我会遇到另一个问题:有时两个数据包一起发送,然后应用程序停止发送数据包。如果某些数据包无法发送到服务器,过了一会儿我遇到了这个错误:

java.util.concurrent.RejectedExecutionException:任务 android.os.AsyncTask$3@23a6501 6 从 java.util.concurrent.ThreadPoolExecutor@3374b96c 被拒绝 [正在运行,池大小 = 9,活动线程 = 9,排队任务 = 128,已完成任务= 403]

这是我的 udp 组件,它每次都调用发送和接收数据包:

export default class UDP {

sendUdpPacket(ip, port) {

dgramSocket = dgram.createSocket({
      type: 'udp4',
      debug: true,
});

randomPort = someport                                

dgramSocket.bind(randomPort, function (err) {
      if (err) {
          console.log("error in bind: " + err)
          reject(false)  
      }
})

dgramSocket.once('listening', function () {
          let msgArray = new Uint8Array();

          msgArray = dataArray;

          packet_receive = ""
          dgramSocket.send(msgArray, 0, msgArray.length, port, ip, function (err) {

          if (err) {
               console.log("Error in  send: " + JSON.stringify(err) + "---");
               dgramSocket.close()
               reject(false)
          }
          else {
               send = 1
          }
})

    setTimeout(() => {
          if (received == 0) {
               dgramSocket.close()
               reject(false)
          }
    }, 450);

}); // Listening

dgramSocket.on('error', function (error) {
      console.log("errrrooorrr in udp: " + error)
 })

// Receive Data 
dgramSocket.on('message', function (packet_receive, rinfo) {
   received = 1

   if (packet_receive.length > 0) {
                                   
       dgramSocket.close()
       resolve(packet_receive);
   }
   else {
       reject(false);
   }
}
else {
   dgramSocket.close()
   reject(false)
}

});

}
}

任何帮助,将不胜感激。

标签: androidreact-nativesocketsudpreal-time

解决方案


推荐阅读