要实现一个简单的聊天功能,使用 PHP 和 Server-Sent Events (SSE),你可以按照以下步骤进行。SSE 允许服务器向客户端推送实时更新,非常适合用于简单的聊天应用。
1. 创建前端页面 (HTML + JavaScript)
首先,创建一个简单的 HTML 页面,用于显示聊天消息并发送新消息。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Simple Chat</title>
</head>
<body>
<div id="chat" style="width: 300px; height: 400px; border: 1px solid #ccc; overflow-y: scroll;"></div>
<input type="text" id="message" placeholder="Type your message here...">
<button onclick="sendMessage()">Send</button>
<script>
// 创建一个 EventSource 对象来接收服务器推送的消息
const eventSource = new EventSource('sse.php');
// 监听服务器发送的消息
eventSource.onmessage = function(event) {
const chat = document.getElementById('chat');
const message = document.createElement('div');
message.textContent = event.data;
chat.appendChild(message);
chat.scrollTop = chat.scrollHeight; // 自动滚动到底部
};
// 发送消息到服务器
function sendMessage() {
const messageInput = document.getElementById('message');
const message = messageInput.value.trim();
if (message) {
fetch('send_message.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: `message=${encodeURIComponent(message)}`
});
messageInput.value = ''; // 清空输入框
}
}
</script>
</body>
</html>
2. 创建 SSE 服务器端脚本 (PHP)
创建一个 sse.php 文件,用于处理 SSE 连接并向客户端推送消息。
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
// 默认 可省略
header('Connection: keep-alive');
// 注意 Nginx服务器需要加上
header('X-Accel-Buffering: no'); // 禁用 Nginx 的响应缓冲
// 简单的消息存储(实际应用中可以使用数据库)
$messageFile = 'messages.txt';
// 检查文件是否存在,如果不存在则创建
if (!file_exists($messageFile)) {
file_put_contents($messageFile, '');
}
// 获取最后修改时间
$lastModified = filemtime($messageFile);
while (true) {
// 检查文件是否被修改
clearstatcache();
$currentModified = filemtime($messageFile);
if ($currentModified > $lastModified) {
$lastModified = $currentModified;
// $messages = file_get_contents($messageFile);
// $messages = explode("\n", $messages);
// 忽略空行或忽略新行
$messages = file($messageFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 发送最新的消息
$lastMessage = end($messages);
if (!empty($lastMessage)) {
echo "data: $lastMessage\n\n";
ob_flush();
flush();
}
}
// 休眠 1 秒
sleep(1);
}
3. 创建发送消息的脚本 (PHP)
创建一个 send_message.php 文件,用于接收客户端发送的消息并将其存储到文件中。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$message = isset($_POST['message']) ? $_POST['message'] : '';
if (!empty($message)) {
$messageFile = 'messages.txt';
file_put_contents($messageFile, $message . "\n" , FILE_APPEND);
}
}
4. 运行和测试
- 将上述文件放在你的 PHP 服务器上。
- 打开浏览器访问 HTML 页面。
- 在输入框中输入消息并点击发送,消息会实时显示在聊天窗口中。
5. 注意事项
- 这个示例是一个非常简单的实现,实际应用中可能需要考虑更多的安全性、性能和扩展性问题。
- 消息存储使用了简单的文本文件,实际应用中建议使用数据库或其他更可靠的存储方式。
- SSE 连接是单向的(服务器到客户端),如果需要双向通信,可以考虑使用 WebSocket。
通过以上步骤,你就可以使用 PHP 和 SSE 实现一个简单的聊天功能了。

运行截图_20250223120332.png