>  기사  >  백엔드 개발  >  PHP 및 MySQL에서 Swoole 및 Workerman의 메시지 브로드캐스트 및 구독 실시간 알림 기능

PHP 및 MySQL에서 Swoole 및 Workerman의 메시지 브로드캐스트 및 구독 실시간 알림 기능

王林
王林원래의
2023-10-15 17:25:471163검색

PHP 및 MySQL에서 Swoole 및 Workerman의 메시지 브로드캐스트 및 구독 실시간 알림 기능

Swoole과 Workerman의 PHP 및 MySQL의 메시지 방송 및 구독 실시간 알림 기능

요약:
인터넷의 급속한 발전과 함께 실시간 알림 기능도 최신 애플리케이션에서 없어서는 안 될 부분이 되었습니다. PHP와 MySQL에서는 두 가지 뛰어난 확장 라이브러리인 Swoole과 Workerman을 사용하여 메시지 브로드캐스팅과 구독을 구현하여 실시간 알림 기능을 구현할 수 있습니다. 이 기사에서는 PHP 및 MySQL에서 Swoole 및 Workerman의 응용 시나리오를 자세히 소개하고 독자가 실시간 알림 기능을 이해하고 실습하는 데 도움이 되는 구체적인 코드 예제를 제공합니다.

  1. 소개
    Swoole은 완전 비동기 및 동시 네트워크 통신 기능을 제공하는 PHP 확장 라이브러리로, 이를 통해 PHP는 Node.js와 같은 높은 동시 요청을 처리할 수 있습니다. Workerman은 간단하고 사용하기 쉬운 다중 프로세스 TCP/UDP 서버 라이브러리를 제공하는 또 다른 PHP 확장 라이브러리입니다. 차이점은 Swoole은 비동기식 비차단 IO 작업에 더 중점을 두는 반면 Workerman은 다중 프로세스 작업 처리에 더 중점을 둔다는 것입니다.
  2. Swoole 및 Workerman의 애플리케이션 시나리오
    Swoole 및 Workerman은 PHP 및 MySQL의 실시간 알림 기능에서 다음 시나리오에서 널리 사용됩니다.
  3. 온라인 채팅 애플리케이션: 사용자는 로그인 후 실시간으로 메시지 알림을 받을 수 있습니다.
  4. 실시간 모니터링 시스템: 시스템 관리자는 실시간으로 서버 로그 및 경보 정보를 얻을 수 있습니다.
  5. 비동기 작업 처리: 백그라운드 작업 처리가 완료된 후 프런트엔드 사용자에게 적시에 알림을 보낼 수 있습니다.
  6. Swoole의 실시간 알림 기능 구현
  7. 먼저 실시간 알림 메시지를 주고받을 Swoole WebSocket 서버를 만들어야 합니다. 다음은 간단한 Swoole WebSocket 서버 예시입니다.
  8. <?php
    $server = new SwooleWebSocketServer("0.0.0.0", 9501);
    
    $server->on('open', function (SwooleWebSocketServer $server, $request) {
        echo "new connection open: {$request->fd}
    ";
    });
    
    $server->on('message', function (SwooleWebSocketServer $server, $frame) {
        $message = $frame->data;
        // 实现消息广播
        foreach($server->connections as $fd) {
            $server->push($fd, $message);
        }
    });
    
    $server->on('close', function ($ser, $fd) {
        echo "connection close: {$fd}
    ";
    });
    
    $server->start();
위 예시에서는 Swoole WebSocket 서버를 생성하고 on('message')를 통해 이벤트를 수신하여 메시지 브로드캐스팅 기능을 구현했습니다. 새 연결이 설정되면 메시지가 수신될 때 연결 ID가 인쇄되고 모든 연결이 통과되며 메시지가 각 연결로 전송됩니다.

    on('message')监听事件,实现了消息广播的功能。当有新的连接建立时,会打印连接的ID;当接收到消息时,将遍历所有连接,并发送消息给每个连接。
    1. Workerman的实时通知功能实现
      类似于Swoole,我们可以通过Workerman的功能来实现实时通知功能。以下是一个简单的Workerman服务器示例:
    <?php
    require_once './Workerman/Autoloader.php';
    
    use WorkermanLibTimer;
    use WorkermanWorker;
    
    $worker = new Worker("websocket://0.0.0.0:2345");
    
    $worker->onWorkerStart = function () {
        Timer::add(1, function () {
            // 实现消息广播
            foreach (Worker::$worker[0]->connections as $connection) {
                $connection->send('Hello');
            }
        });
    };
    
    $worker->onConnect = function ($connection) {
        echo "New connection
    ";
    };
    
    $worker->onMessage = function ($connection, $data) {
        echo "Receiving message: {$data}
    ";
    };
    
    $worker->onClose = function ($connection) {
        echo "Connection closed
    ";
    };
    
    Worker::runAll();

    在上面的示例中,我们创建了一个Workerman WebSocket服务器,并通过Timer::add()方法实现了定时发送消息的功能,实现消息广播。当有新的连接建立时,会打印相关信息;当接收到消息时,会打印消息内容;当连接关闭时,会打印相应信息。

    1. 与MySQL结合实现实时通知功能
      为了实现更加实用的实时通知功能,我们可以与MySQL数据库结合使用。以下是一个示例代码,通过MySQL的触发器实现当新数据插入时,发送实时通知给所有客户端。
    CREATE TABLE `messages` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `content` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    );
    
    CREATE TRIGGER `new_message` AFTER INSERT ON `messages` FOR EACH ROW
    BEGIN
      DECLARE message VARCHAR(255);
      SET message = CONCAT('New message: ', NEW.content);
      -- 发送实时通知
      INSERT INTO `notifications` (`message`) VALUES (message);
    END;

    通过以上的触发器定义,当有新的消息插入到messages表中时,会自动触发触发器中的代码,将消息信息插入到notifications表中。然后在Swoole或Workerman的服务器中,实现定时查询notificationsWorkerman의 실시간 알림 기능 구현

    Swoole과 마찬가지로 Workerman의 기능을 통해 실시간 알림 기능을 구현할 수 있습니다. 다음은 간단한 Workerman 서버 예시입니다.
    1. rrreee
      위 예시에서는 Workerman WebSocket 서버를 생성하고 Timer::add() 메서드를 통해 정기적으로 메시지를 보내는 기능을 구현했습니다. 메시지 방송. 새로운 연결이 설정되면 관련 정보가 인쇄되고, 메시지가 수신되면 메시지 내용이 인쇄되며, 연결이 종료되면 해당 정보가 인쇄됩니다.
      1. MySQL과 결합하여 실시간 알림 기능 구현🎜보다 실용적인 실시간 알림 기능을 구현하기 위해 MySQL 데이터베이스와 함께 사용할 수 있습니다. 다음은 새 데이터가 삽입될 때 MySQL 트리거를 사용하여 모든 클라이언트에 실시간 알림을 보내는 샘플 코드입니다. 🎜🎜rrreee🎜위의 트리거 정의를 사용하면 새 메시지가 메시지 테이블에 삽입되면 트리거의 코드가 자동으로 트리거되고 메시지 정보가 알림 코드> 테이블. 그런 다음 Swoole 또는 Workerman 서버에서 <code>notifications 테이블을 정기적으로 쿼리하는 기능을 구현하고, 새로운 알림이 있으면 해당 클라이언트로 보냅니다. 🎜🎜🎜요약🎜이 글에서는 Swoole과 Workerman이 PHP와 MySQL에서 실시간 알림 기능을 구현하는 방법을 소개하고 각 라이브러리의 애플리케이션 시나리오와 구체적인 코드 예제를 자세히 설명합니다. 이 두 가지 뛰어난 확장 라이브러리를 사용하면 실시간 알림 기능을 쉽게 구현하고 애플리케이션의 사용자 경험을 향상시킬 수 있습니다. 독자는 강력한 실시간 알림 기능을 달성하기 위해 자신의 필요에 따라 적합한 라이브러리와 방법을 선택할 수 있습니다. 🎜🎜

    위 내용은 PHP 및 MySQL에서 Swoole 및 Workerman의 메시지 브로드캐스트 및 구독 실시간 알림 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.