PHP가 시스템 메시지를 클라이언트에 실시간으로 푸시하는 원리와 자세한 설명

藏色散人
풀어 주다: 2023-04-08 09:46:01
앞으로
2807명이 탐색했습니다.

PHP가 시스템 메시지를 클라이언트에 실시간으로 푸시하는 원리와 자세한 설명

실제 개발 과정에서 일부 데이터는 실시간으로 얻어야 ​​합니다.

예를 들어 ERP 시스템의 주문 정보, OA 시스템의 프로세스 승인 등은 적시에 처리되어야 합니다. 현재로서는 더 이상 http 프로토콜을 사용할 수 없습니다. 물론 폴링 메커니즘도 사용할 수 있습니다.

그러나 대부분의 폴링 요청은 쓸모가 없으며 대역폭과 서버 리소스를 낭비합니다.

이번에는 이러한 비즈니스 요구 사항을 충족하기 위해 websocket 프로토콜을 사용해야 합니다.

준비 작업:

Installation

Extension; PHP-swoole

<?php
new class
{
    private $_serv = null;
    public function __construct()
    {
        $this->_serv = new swoole_websocket_server(&#39;0.0.0.0&#39;, 6552);
        $this->_serv->set(array(
            &#39;worker_num&#39;      => 2,
            &#39;dispatch_mode&#39;   => 3,
        &#39;log_file&#39; => &#39;swoole.log&#39;,
        ));
  //增加个监听端口
    $udpworker =  $this->_serv->listen("127.0.0.1", 6553, SWOOLE_SOCK_UDP);
    $udpworker->on(&#39;Packet&#39;, function ($serv, $data, $addr) {
            $data = json_decode($data, true);
            if(!empty($data)){
                //你的业务逻辑
            }
        });
        $this->_serv->on(&#39;open&#39;, array($this, &#39;onStart&#39;));
        $this->_serv->on(&#39;message&#39;, array($this, &#39;onMessage&#39;));
        $this->_serv->on(&#39;close&#39;, array($this, &#39;onClose&#39;));
        $this->_serv->start();
    }
   
    public function onStart($serv, $request)
    {
        echo "server: connect success with fd {$request->fd}\n";
    }
    //format:&#39;{"school_class_id":"1","school_id":"2"}&#39;
    public function onMessage($serv, $frame)
    {
    /**start*你的业务逻辑***/
    }
    public function onClose($serv, $fd)
    {
        echo "client {$fd} closed\n";
    }
}
?>
로그인 후 복사

원리:

먼저 웹소켓 서버 개체를 생성하고 0.0.0.0:6552 포트에서 수신 대기한 다음 서비스 개체를 사용하여 UDP 6553 포트에서 수신 대기합니다. 클라이언트 메시지는 인터페이스 6553으로 전송된 다음 포트 6552를 통해 사용자에게 전송됩니다.

더 많은 관련 PHP 지식을 보려면

php 튜토리얼

을 방문하세요!

위 내용은 PHP가 시스템 메시지를 클라이언트에 실시간으로 푸시하는 원리와 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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