Il existe actuellement plusieurs appareils radar qui scannent une certaine zone. Après la numérisation, des données d'environ1,4 millionpoints (chaque point contient 4 attributs) seront renvoyées.
Ensuite, l'équipement radar divise les données en,
分隔的字符串:"x1,y1,a1,p1,x2,y2,a2,p2......x1400000,y1400000,a1400000,p1400000"
La taille de cette chaîne doit être de plusieurs dizaines de mégaoctets, soit moins de 100 mégaoctets.
Le code PHP est traité comme ceci :
$num=$_POST['num'];//点的总数量 $str=$_POST['str'];//点的4个属性组成的字符串 $str_arr=expload(',',$str);//将字符串转换为数组 //将数组转换成json字符串 $point=array(); for($n=1;$n<=$num;$n++){ $x=$str_arr[$n*4-4]; $y=$str_arr[$n*4-3]; $a=$str_arr[$n*4-2]; $p=$str_arr[$n*4-1]; $point[]=array("x"=>$x,"y"=>$y,"a"=>$a,"$p"=>$p); } $json_str=json_encode($point); //将json字符串保存在".txt"文件中 $handle=fopen("./1.txt","w"); fwrite($handle, $json_str); fclose($handle); //返回请求成功信息 echo "ask=1&cmd=3"; exit;
Je ne connais pas grand-chose à la consommation de mémoire, et c'est la première fois que je traite une si grande quantité de données
Lorsque les données transmises par le radar ne représentent que11Wpoints de groupe (environ3 Modonnées), je peux recevez-le et traitez-le avec succès
Quand une fois que les données sont un peu plus volumineuses, il vous demandeLa limite de mémoire est de 128 Mo
J'ai vérifié certaines méthodes sur Internet, la plupart d'entre elles consistent à modifier lememory_limit=-1
php.ini
. code>php.ini
文件中memory_limit=-1
可是改了之后仍然无法传输
目前跟雷达端商量的是他每次最多给我传10W组点,然后再多个一个参数本次传输还剩多少点
Mais après l'avoir modifié, il ne peut toujours pas être transmis
Actuellement, la discussion avec le terminal radar est qu'il peut m'envoyer un maximum de
10W
Combien de points reste-t-il dans cette transmission ?
, une fois que PHP l'aura reçu, il lui sera donné comme valeur de retour, et il rappellera et continuera à l'envoyer pour moi, cependant, calculé de cette façon, il faudra au total 14 à 15 transmissions pour envoyer un ensemble de données... et la faisabilité n'est pas encore certaine Chers amis, comment gérer ce genre de problème pendant. développement? En attente en ligne. . .
Question : Gzip est-il activé ? Ce type de données JSON pures a un taux de compression élevé après son activation. Après avoir modifié la limite de mémoire, la connexion réseau peut également expirer.
Le serveur Web a une limite de longueur pour recevoir le corps s'il est trop long, il ne peut pas être accepté, comme nginx-client_max_body_size
La transmission par lots est une meilleure solution en mode web
Une meilleure façon est d'utiliser la transmission binaire socket, qui n'a pas diverses restrictions en mode Web et est plus efficace
Tout d’abord, votre chaîne occupe beaucoup de mémoire. Si vous la convertissez en tableau, elle occupera beaucoup de mémoire.
En fonction de vos besoins, la dernière étape consiste à le convertir en json et à l'enregistrer dans un fichier. Json est également une chaîne, alors pourquoi ne pas la traiter directement sous forme de chaîne.
S'il s'agit de php7, preg_replace ne peut pas être utilisé et doit être remplacé par preg_replace_callback
Augmentez simplement la limite de mémoire et le volume des données de publication. . En gros, il n'y a aucun problème pour traiter quelques centaines de mégabits