현재 특정 영역을 스캔하는 여러 레이더 장치가 있습니다. 스캔 후 약 140만 포인트(각 포인트에는 4가지 속성 포함)의 데이터가 반환됩니다.
그런 다음 레이더 장비는 데이터를 ,
分隔的字符串:"x1,y1,a1,p1,x2,y2,a2,p2......x1400000,y1400000,a1400000,p1400000"
로 연결합니다. 이 문자열의 크기는 수십 메가바이트, 100메가바이트 미만이어야 합니다.
PHP 코드는 다음과 같이 처리됩니다:
메모리 소모에 대해 잘 모르고, 이렇게 많은 양의 데이터를 처리하는 것은 처음입니다
레이더에서 전송되는 데이터가 11W그룹 포인트(약 3MB데이터)에 불과할 때, 성공적으로 수신하여 처리합니다
데이터가 조금 더 커지면 메모리 제한은 128M입니다
인터넷에서 몇 가지 방법을 확인해 보니 대부분 memory_limit=-1을 변경하는 것입니다.
php.ini
파일.code>php.ini
文件中memory_limit=-1
可是改了之后仍然无法传输
目前跟雷达端商量的是他每次最多给我传10W组点,然后再多个一个参数本次传输还剩多少点
변경한 후에도 여전히 전송이 되지 않습니다
현재 레이더 단말기와 논의한 바에 따르면 각각 최대
10W
이 전송에 몇 개의 포인트가 남아 있습니까?
매개변수를 추가하면 PHP가 이를 수신한 후 반환 값으로 제공되며 그는 다시 전화하여 계속해서 전송합니다. 하지만 이렇게 계산하면 데이터 세트를 전송하는 데 총 14~15번의 전송이 필요하며... 아직 실현 가능성은 확실하지 않습니다🎜 사랑하는 여러분, 개발 중에 이런 문제를 어떻게 처리하시나요? ? 🎜온라인 대기 중입니다. . . 🎜phpcn_u15822017-05-27 17:44:31
질문: gzip이 활성화되어 있나요? 이러한 종류의 순수 JSON 데이터는 활성화된 후 압축률이 높습니다. 메모리 제한을 변경한 후에도 네트워크 연결 시간이 초과될 수 있습니다.
滿天的星座2017-05-27 17:44:31
웹 서버가 받는 본문에는 길이 제한이 있습니다. nginx-client_max_body_size
일괄 전송은 웹 모드에서 더 나은 솔루션입니다
더 좋은 방법은 웹 모드에서 다양한 제한이 없고 더 효율적인 소켓 바이너리 전송을 사용하는 것입니다
仅有的幸福2017-05-27 17:44:31
먼저 문자열은 메모리를 많이 차지합니다. 이를 배열로 변환하면 메모리를 많이 차지하게 됩니다.
필요에 따라 마지막 단계는 json으로 변환하여 파일로 저장하는 것입니다. Json도 문자열이므로 직접 문자열로 처리해 보는 것은 어떨까요?
php7의 경우 preg_replace를 사용할 수 없으며 preg_replace_callback으로 바꿔야 합니다
으아악