PHP SSE从建立链接 管理链接对象或ID 并通过函数组装数据发送数据到指定链接
时间: 2024-03-12 12:45:21 浏览: 19
以下是通过 PHP SSE 建立链接、管理链接对象或 ID,并通过函数组装数据发送数据到指定链接的步骤:
1. 建立链接:使用 PHP 的 `header` 函数设置响应头,将 Content-Type 设置为 "text/event-stream",并且不要缓存响应。
```php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
```
2. 管理链接对象或 ID:在 PHP 中,可以使用 `$_SESSION` 或 `$_COOKIE` 等机制来保存链接对象或 ID。
```php
// Save connection ID in session
$_SESSION['connection_id'] = $connection_id;
```
3. 组装数据:将数据格式化为 "data: message\n\n" 的形式,并将多个消息拼接成一个字符串。
```php
function formatMessage($message) {
return "data: " . $message . "\n\n";
}
$messages = array(
"Hello, World!",
"How are you?",
"Goodbye!"
);
$messageString = "";
foreach ($messages as $message) {
$messageString .= formatMessage($message);
}
```
4. 发送数据到指定链接:使用 `echo` 函数发送消息到客户端,消息格式为拼接好的消息字符串。同时,使用 `ob_flush()` 和 `flush()` 函数清空输出缓冲区,确保消息实时发送。
```php
echo $messageString;
ob_flush();
flush();
```
注意:在发送数据之前,需要检查客户端是否还保持连接。如果客户端关闭了连接,则需要清空输出缓冲区并退出循环。可以使用 `connection_aborted()` 函数检查连接是否已经关闭。
完整代码示例:
```php
<?php
session_start();
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
// Get connection ID
$connection_id = isset($_SESSION['connection_id']) ? $_SESSION['connection_id'] : null;
// Check if connection is still open
while (!connection_aborted()) {
// Check for new messages
// ...
// Format messages
function formatMessage($message) {
return "data: " . $message . "\n\n";
}
$messages = array(
"Hello, World!",
"How are you?",
"Goodbye!"
);
$messageString = "";
foreach ($messages as $message) {
$messageString .= formatMessage($message);
}
// Send message to client
echo $messageString;
ob_flush();
flush();
// Wait for next message
sleep(1);
}
```