首页
/ EventSource 项目技术文档

EventSource 项目技术文档

2024-12-25 09:35:48作者:申梦珏Efrain

1. 安装指南

1.1 使用 Composer 安装

推荐使用 Composer 来安装 EventSource 库。首先,在你的项目根目录下创建一个 composer.json 文件,内容如下:

{
    "require": {
        "igorw/event-source": "1.0.*"
    }
}

然后,运行以下命令来安装依赖:

$ curl -s http://getcomposer.org/installer | php
$ php composer.phar install

安装完成后,你可以通过自动加载器来使用库:

<?php
require 'vendor/autoload.php';

2. 项目使用说明

2.1 输出 EventSource 头信息

首先,你需要输出 EventSource 的头信息,以便客户端知道它正在与一个 EventSource 服务器通信。可以使用以下代码:

<?php

use Igorw\EventSource\Stream;

foreach (Stream::getHeaders() as $name => $value) {
    header("$name: $value");
}

2.2 创建并发送事件

接下来,创建一个 Stream 对象,并通过其 API 创建和发送事件。以下示例代码每 2 秒发送一个新事件:

<?php

use Igorw\EventSource\Stream;

$stream = new Stream();

while (true) {
    $stream
        ->event()
            ->setData("Hello World")
        ->end()
        ->flush();
    
    sleep(2);
}

2.3 JavaScript 客户端示例

在客户端,你可以使用以下 JavaScript 代码来接收事件:

var stream = new EventSource('stream.php');

stream.addEventListener('message', function (event) {
    console.log(event.data);
});

3. 项目 API 使用文档

3.1 事件 ID

如果你的事件有 ID,客户端在重新连接时会发送 Last-Event-ID 头信息。你可以读取这个值并重新发送任何在此之后发生的事件。

<?php

$lastId = filter_input(INPUT_SERVER, 'HTTP_LAST_EVENT_ID');

if ($lastId) {
    $buffer = getMessagesAfter($lastId);

    foreach ($buffer as $message) {
        $stream->event()
            ->setId($message['id'])
            ->setData($message['data']);
    }

    $stream->flush();
}

3.2 事件命名空间

你可以通过 setEvent 方法为事件设置命名空间。这允许你在客户端绑定到特定类型的事件。

<?php

$stream
    ->event()
        ->setEvent('foo')
        ->setData($message['data']);
    ->end()
    ->event()
        ->setEvent('bar')
        ->setData($message['data']);
    ->end()
    ->flush();

在客户端,你可以绑定到这些事件类型:

var stream = new EventSource('stream.php');

stream.addEventListener('foo', function (event) {
    console.log('Received event foo!');
});

stream.addEventListener('bar', function (event) {
    console.log('Received event bar!');
});

3.3 发送 JSON 数据

在大多数应用中,你可能需要发送更复杂的数据而不是简单的字符串。推荐使用 JSON 格式来实现这一点。

在服务器端,使用 json_encode 函数来编码数据:

<?php

$data = array('userIds' => array(21, 43, 127));

$stream
    ->event()
        ->setData(json_encode($data));
    ->end()
    ->flush();

在客户端,使用 JSON.parse 来解码数据:

var stream = new EventSource('stream.php');

stream.addEventListener('message', function (event) {
    var data = JSON.parse(event.data);
    console.log('User IDs: '+data.userIds.join(', '));
});

4. 项目安装方式

4.1 通过 Composer 安装

如前所述,推荐使用 Composer 来安装 EventSource 库。具体步骤请参考 安装指南

4.2 手动安装

如果你不使用 Composer,也可以手动下载库文件并将其包含在你的项目中。不过,这种方式不推荐,因为它会增加维护的复杂性。

4.3 测试

你可以通过运行以下命令来测试项目:

$ phpunit

5. 其他注意事项

5.1 PHP 时间限制

在某些环境中,可能需要移除脚本的时间限制。如果你的脚本在 30 或 60 秒后停止运行,可以添加以下代码:

<?php
set_time_limit(0);

5.2 Polyfill

大多数旧版浏览器尚未实现 EventSource。幸运的是,有一个 polyfill 可用,允许在更广泛的浏览器中使用 EventSource。


通过以上文档,你应该能够顺利安装、使用和理解 EventSource 项目。如果有任何问题,请参考项目的 GitHub Wiki 或联系项目维护者。

热门项目推荐
相关项目推荐

项目优选

收起
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
263
53
国产编程语言蓝皮书国产编程语言蓝皮书
《国产编程语言蓝皮书》-编委会工作区
64
16
open-eBackupopen-eBackup
open-eBackup是一款开源备份软件,采用集群高扩展架构,通过应用备份通用框架、并行备份等技术,为主流数据库、虚拟化、文件系统、大数据等应用提供E2E的数据备份、恢复等能力,帮助用户实现关键数据高效保护。
HTML
85
63
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
53
44
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
195
45
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
268
69
xxl-jobxxl-job
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
Java
9
0
RuoYi-VueRuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
171
41
RuoYi-Cloud-Vue3RuoYi-Cloud-Vue3
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
38
24
qwerty-learnerqwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
332
27