몰 시스템을 구축하는 과정에서 주문 알림 기능이 필요합니다. 즉, 새로운 주문이 들어오면 알림이 제공됩니다. 제가 구현하는 방식은 주문이 접수된 후 "새로운 주문이 있으니 주의 깊게 확인해주세요!"라는 알림을 표시하는 것입니다.

Solution
ajax polling(추천 학습: PHP 프로그래밍 시작부터 마스터까지 )
폴링 방법은 몇 초마다 요청을 시작하는 비교적 간단합니다. 프로젝트에 주문이 많지 않은 경우 몇 초마다 요청을 보내면 서버에 많은 부담이 가해집니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <script>
setInterval( "order()" ,59000000);
var last_count = { $count };
function order() {
var data = {
'last_count':last_count
};
$.ajax({
type: "POST" ,
data: data,
url: "{:url('Order/sendOrderNotice')}" ,
timeout: 60000,
cache: false,
async: false,
dataType: "json" ,
success: function (data) {
if (data.status == 1){
var audio = document.getElementById( "play" );
audio.play();
last_count = data.last_count;
setTimeout( function (){
window.location.reload();
}, 3000);
}
}
});
}
</script>
|
로그인 후 복사
위 내용이 이 솔루션의 핵심입니다. 자신의 비즈니스 로직에 맞게 백엔드 코드를 작성해 주세요.
Workerman
Workerman은 순수하게 PHP로만 개발된 오픈 소스 고성능 PHP 소켓 서비스 프레임워크입니다.
Workerman은 MVC 프레임워크가 아니라 더 낮은 수준의 일반적인 소켓 서비스 프레임워크를 사용하여 TCP 에이전트, 래더 에이전트, 게임 서버, 메일 서버, FTP 서버 등을 개발할 수 있습니다. 심지어 PHP 버전의 redis, PHP 버전의 데이터베이스, PHP 버전의 nginx, PHP 버전의 php-fpm 등도 개발할 수 있습니다. 워커맨은 개발자들이 PHP가 WEB만 할 수 있다는 제약을 완전히 없앨 수 있게 해준 PHP 분야의 혁신이라 할 수 있습니다.
사실 Workerman은 PHP 버전의 nginx와 유사합니다. 코어도 다중 프로세스 + Epoll + 비차단 IO입니다. 각 Workerman 프로세스는 수만 개의 동시 연결을 유지할 수 있습니다.
메모리에 상주하기 때문에 Apache, nginx, php-fpm 등의 컨테이너에 의존하지 않으며 초고성능을 자랑합니다. 또한 TCP, UDP, UNIXSOCKET, 긴 연결, Websocket, HTTP, WSS, HTTPS 및 기타 통신 프로토콜과 다양한 사용자 정의 프로토콜을 지원합니다.
타이머, 비동기 소켓 클라이언트, 비동기 Mysql, 비동기 Redis, 비동기 Http, 비동기 메시지 대기열 등과 같은 많은 고성능 구성 요소가 있습니다.
주문 모니터링 페이지 코드:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <script src='http:
<script src= "https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js" ></script>
<script>
var socket = io('http:
uid = 1557062581000;
socket.on('connect', function (){
socket.emit('login', uid);
});
<!--
socket.on('new_msg', function (msg){
$( "#msg" ).append(msg);
if (msg == 1){
var audio = document.getElementById( "play" );
audio.play();
}
});
socket.on('update_online_count', function (online_stat){
console.log(online_stat);
});
</script>
|
로그인 후 복사
백엔드 코드:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public function sends( $id )
{
if ( $id == 1){
$this ->send_workman( $id );
} else {
echo '没有发送消息';
}
}
public function send_workman( $id )
{
$to_uid = '1557062581000';
$push_api_url = "http://www.tp5_test.com:2121/" ;
$post_data = array (
"type" => "publish" ,
"content" => $id ,
"to" => $to_uid ,
);
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL, $push_api_url );
curl_setopt ( $ch , CURLOPT_POST, 1 );
curl_setopt ( $ch , CURLOPT_HEADER, 0 );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS, $post_data );
curl_setopt ( $ch , CURLOPT_HTTPHEADER, array ( "Expect:" ));
$return = curl_exec ( $ch );
curl_close ( $ch );
var_export( $return );
}
|
로그인 후 복사
위 내용은 PHP에서 새로운 주문 프롬프트 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!