> 백엔드 개발 > PHP 문제 > PHP에서 새로운 주문 프롬프트 기능을 구현하는 방법

PHP에서 새로운 주문 프롬프트 기능을 구현하는 방법

(*-*)浩
풀어 주다: 2023-02-23 22:48:02
원래의
5510명이 탐색했습니다.

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

PHP에서 새로운 주문 프롬프트 기능을 구현하는 방법

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);//每59秒刷新查询一次

    var last_count = {$count};

    function order() {

  

        var data = {

            &#39;last_count&#39;:last_count

        };

  

        $.ajax({

            type: "POST",

            data: data,

            url: "{:url(&#39;Order/sendOrderNotice&#39;)}",//后台方法

            timeout: 60000,

            cache: false,

            async: false,

            dataType: "json",

            success: function(data) {

                if(data.status == 1){

                    var audio = document.getElementById( "play" ); //浏览器支持 audio

                    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=&#39;http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js&#39;></script>

<script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>

<script>

    // 连接服务端,workerman.net:2120换成实际部署web-msg-sender服务的域名或者ip

    var socket = io(&#39;http://www.tp5_test.com:2120&#39;); //http://www.tp5_test.com换成自己的域名或者ip

    // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,这个ID可以随便写

    uid = 1557062581000;

    // socket连接后以uid登录

    socket.on(&#39;connect&#39;, function(){

        socket.emit(&#39;login&#39;, uid);

    });

    <!--// 后端推送来消息时-->

    socket.on(&#39;new_msg&#39;, function(msg){

  

        //两种处理方式

  

        // 1 追加到页面元素中,可以做成页面的弹窗

        $("#msg").append(msg);

  

  

        //2 播放提示应 :

        if(msg == 1){

            var audio = document.getElementById( "play" ); //浏览器支持 audio

            audio.play(); //播放提示音

        }

  

  

    });

    // 后端推送来在线数据时

    socket.on(&#39;update_online_count&#39;, 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

//这个方法我随便写了写,具体的处理就是在支付完成回调以后,用用send_workerman方法就可以了。我是用sends来模型支付完成以后的回调

public function sends($id)

{

    // var_dump($id);die;

    if($id == 1){

      $this->send_workman($id);

    }else{

      echo &#39;没有发送消息&#39;;

    }

}

 

 

/**

 * @route(&#39;send_workman&#39;)

 */

public function send_workman($id)

{

    $to_uid = &#39;1557062581000&#39;; //和页面的uid一致,不填写也可以

    // 推送的url地址,使用自己的服务器地址

    $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿