android - 在实时应用程序中反应本机 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)
}
});
}
}
任何帮助,将不胜感激。
解决方案
推荐阅读
- ios - 想通过从firebase下载数据来在tableView中添加一个collectionView来显示。ios 应用 斯威夫特
- reactjs - React console.log 不显示状态数组值
- javascript - ReactJS - TypeError:无法读取未定义的属性“名称”
- html - 如何使用css找到一些同级别的元素?
- r - 如何选择最大值(逐个元素)交叉向量并根据其向量在R中的名称为每个点命名
- javascript - javascript 未设置 DateTime-Locale 值
- javascript - 使用 onclick 函数隐藏 DIV - 寻找一种更简洁的方法来实现相同的结果
- c# - 这个foreach可以改进吗?
- python - 如何使用 Netmiko SSH (Python) 重启 cisco 交换机?
- python-3.x - 代码优化:Torch.Tensor 中的计算