실시간 메시징 기술은 웹 사이트 및 응용 프로그램이보다 효율적인 사용자 상호 작용 경험을 달성하는 데 도움이 될 수 있습니다. 예를 들어, 사용자가 온라인 고객 서비스, 채팅방 또는 실시간 알림 시스템을 사용하는 경우 가능한 빨리 서버로부터 메시지를 수신해야합니다. 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
// 데이터베이스 연결
$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();
?>
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 환경을 지원하지 않는 프로젝트에 적합합니다. 실시간 성능이 낮지 만 적시에 피드백이 필요한 애플리케이션 시나리오를 채택 할 가치가있는 솔루션입니다.