首页
/ EventSource 项目技术文档

EventSource 项目技术文档

2024-12-25 02:06:29作者:申梦珏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 或联系项目维护者。

登录后查看全文
热门项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
136
1.89 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
71
63
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
344
1.28 K
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
918
550
PaddleOCRPaddleOCR
飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
Python
46
1
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
36
8
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
193
273
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
59
16