예를 들어 휴대폰 문자 메시지를 일괄적으로 보내는 기능을 만들어야 합니다. 이를 위해 for 루프를 사용하면 문자 메시지 수가 많을 때 시간이 많이 걸릴 뿐만 아니라 매우 낮은 성공률.
그래서 PHP와 MySQL을 사용하여 메시지 큐를 구현하고 문자 메시지를 하나씩 보내려고 생각했습니다.
먼저 다음 필드를 포함하는 SMS 데이터 테이블을 만듭니다.
id,
phone, //휴대폰 번호
content //SMS 콘텐츠
전송해야 하는 문자 메시지와 휴대폰 번호를 SMS 테이블에 저장합니다.
구현된 코드는 다음과 같습니다.
<?php
while(true){
}
echo '전송 완료! ';
?>
예를 들어, 백그라운드에 보내기 버튼이 있으면 위 프로그램이 실행됩니다. 10초마다 데이터베이스에서 데이터 조각을 가져와 문자 메시지를 보냅니다.
문제: 보내기 버튼을 클릭한 다음 다른 페이지를 직접 클릭하여 다른 작업을 수행하면 해당 페이지를 계속 클릭하고 보내기가 완료될 때까지 기다리지 않고 떠나면 위 프로그램이 계속 실행됩니다. 아니면 다른 페이지로 가면 루프가 튀어나와서 문자가 안오네요
淡淡烟草味2017-05-19 10:09:28
PHP는 단일 스레드입니다. 즉, 실행을 시작하자마자 완전히 실행될 때까지 기다리거나 미리 중단해야 하며 동시에 두 가지 액세스를 수행할 수 없습니다. 버튼을 클릭한 후 비동기적으로 처리하고 다른 작업을 수행하기 위해 직접 점프해야 하는 경우 비동기적으로 처리하려는 작업을 처리하려면 Swoole 서비스가 필요합니다.
给我你的怀抱2017-05-19 10:09:28
이런 경우에는 백그라운드 웹페이지에 넣지 않고 명령줄 모드에서 바로 실행하시면 됩니다. 그런 다음 데이터 없이 종료되는 상위 코드는 일정 시간 동안 절전 모드로 변경됩니다.
世界只因有你2017-05-19 10:09:28
PHP-Cli 모드를 살펴볼 수 있습니다. MOOC.com에 동영상이 있습니다. MySQL은 대기열을 통해 이메일 전송을 시뮬레이션하며 그 효과는 주요 질문과 유사합니다.
给我你的怀抱2017-05-19 10:09:28
원본 포스터의 php+mysql이 맞다고 생각하는데, cron 작업을 계속 사용해야 합니다. cron 작업은 XX초마다 실행되도록 스크립트를 설정하는 것입니다.
크론탭을 포기해야 한다면. 그렇다면 다음 코드를 추천해주세요
으아아아