현재 위치: > 최신 기사 목록> PHP 실시간 메시지 푸시 구현 사례에 대한 자세한 설명 (긴 폴링 기반)

PHP 실시간 메시지 푸시 구현 사례에 대한 자세한 설명 (긴 폴링 기반)

gitbox 2025-08-05

사례 배경

실시간 메시징 기술은 웹 사이트 및 응용 프로그램이보다 효율적인 사용자 상호 작용 경험을 달성하는 데 도움이 될 수 있습니다. 예를 들어, 사용자가 온라인 고객 서비스, 채팅방 또는 실시간 알림 시스템을 사용하는 경우 가능한 빨리 서버로부터 메시지를 수신해야합니다. WebSocket은 현재 주류 실시간 통신 기술이지만 일부 서버 또는 환경에 대한 지원이 좋지 않아 PHP를 사용하는 것은 여전히 실용적이고 실현 가능한 대안입니다.

실시간 메시지 푸시의 원리

메시지 푸시의 핵심은 클라이언트와 서버 간의 지속적인 통신을 유지하는 것입니다. 기존의 HTTP 커뮤니케이션은 단방향 요청 응답이며, 긴 폴링은 클라이언트가 요청을 발행 한 후에 응답을 지연시켜 대략적인 실시간 효과를 달성합니다.

긴 폴링 워크 플로우

긴 폴링의 의사 소통 과정은 다음 단계로 나눌 수 있습니다.

  • 클라이언트는 요청을 서버로 보냅니다.
  • 서버는 새 메시지를 사용할 수 있는지 여부를 결정합니다.
  • 새 메시지가 있으면 메시지 데이터를 즉시 반환하십시오.
  • 메시지가 없으면 서버가 연결되어 새 메시지가 생성 될 때까지 기다립니다.
  • 시간 초과 또는 메시지를 기다린 후 서버는 응답을 반환합니다.
  • 응답을받은 후 클라이언트는 요청을 즉시 다시 보냅니다.

시스템 구현 단계

데이터베이스 테이블을 만듭니다

먼저 메시지 저장을위한 데이터베이스 테이블을 설계해야합니다. 예를 들어 다음 "메시지"테이블을 만들 수 있습니다.

 
CREATE TABLE messages (
  id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  content VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

프론트 엔드 페이지 개발

프론트 엔드 페이지는 푸시 된 실시간 메시지를 표시하는 데 사용되며 jQuery와 함께 HTML 및 JavaScript를 사용하여 처리 할 수 있습니다.

 
<!DOCTYPE html>
<html>
<head>
  <title>실시간 메시지 푸시</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="app.js"></script>
</head>
<body>
  <div id="messages"></div>
</body>
</html>

백엔드 처리 로직

백엔드 PHP 코드는 긴 폴링 로직 및 데이터 응답을 처리하는 데 도움이됩니다. 프론트 엔드에서 시작한 요청을 처리하기 위해 index.php 라는 파일을 만들 수 있습니다.

기본 PHP 처리 예

 
<?php
// 데이터베이스 연결
$conn = new mysqli("localhost", "사용자 이름", "비밀번호", "데이터베이스 이름");
if ($conn->connect_error) {
    die("연결이 실패했습니다: " . $conn->connect_error);
}

// 마지막으로받은 마지막 메시지를 받으십시오ID
$lastId = isset($_GET['last_id']) ? intval($_GET['last_id']) : 0;
$timeout = 30; // 최대를 기다리십시오30두번째
$startTime = time();

while (true) {
    $sql = "SELECT * FROM messages WHERE id > $lastId ORDER BY id ASC";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $messages = [];
        while($row = $result->fetch_assoc()) {
            $messages[] = $row;
        }
        echo json_encode(["status" => "success", "data" => $messages]);
        break;
    } else {
        // 그 밖의 모든1두번째检查一次是否有新消息,과도한 서버 압력을 피하십시오
        sleep(1);
    }

    if ((time() - $startTime) > $timeout) {
        echo json_encode(["status" => "timeout", "data" => []]);
        break;
    }
}
$conn->close();
?>

프론트 엔드 폴링 스크립트 (app.js)

 
let lastId = 0;
function fetchMessages() {
  $.ajax({
    url: 'index.php',
    type: 'GET',
    data: { last_id: lastId },
    success: function(response) {
      if (response.status === 'success') {
        response.data.forEach(function(msg) {
          $('#messages').append('<p>' + msg.content + '</p>');
          lastId = msg.id;
        });
      }
      fetchMessages();
    },
    error: function() {
      setTimeout(fetchMessages, 3000);
    }
  });
}

$(document).ready(function() {
  fetchMessages();
});

요약

위의 방법을 통해 PHP 및 긴 폴링 기술을 사용하여 기본 실시간 메시징 푸시 시스템을 성공적으로 구축했습니다. 이 솔루션은 호환성이 우수하고 개발 임계 값이 낮으며 WebSocket 환경을 지원하지 않는 프로젝트에 적합합니다. 실시간 성능이 낮지 만 적시에 피드백이 필요한 애플리케이션 시나리오를 채택 할 가치가있는 솔루션입니다.