evertharmeling/sparkcore

PHP 类,帮助与 sparkcore 交互。例如,消费服务器端事件。

1.0.0 2014-06-29 13:55 UTC

This package is auto-updated.

Last update: 2024-08-29 03:26:09 UTC


README

PHP 类,帮助与 sparkcore 交互。例如,消费服务器端事件。

实现

首先创建自己的 Sparkhose 类,它扩展了 SparkCore\Stream\Sparkhose

这个库实现为一个抽象类(Sparkhose),扩展后可以利用 SparkCore 事件流。

这个设计选择是为了允许以最少的代码编写量使用库,同时保持 PHP/OO 风格(例如:没有回调等)。

在其最简单的形式中,你需要扩展这个类并实现 enqueueEvent() 方法

<?php

namespace MyApp\MyBundle\Stream;

use SparkCore\Stream\Event\SparkEvent;
use SparkCore\Stream\Sparkhose as BaseSparkhose;

class Sparkhose extends BaseSparkhose
{
    /**
     * {@inheritdoc}
     *
     * @param SparkEvent $event
     */
    public function enqueueEvent(SparkEvent $sparkEvent)
    {
        // do something with $sparkEvent
    }
}

现在你可以启动自己的 Sparkhose 类了

<?php

use MyApp\MyBundle\Stream\Sparkhose;

$sparkhose = new Sparkhose('spark_device_id', 'spark_access_token');
$sparkhose->consume();

特定事件

可选地,你可以通过在 Sparkhose 对象上设置 'event_name' 来监听特定事件。

<?php

use MyApp\MyBundle\Stream\Sparkhose;

$sparkhose = new Sparkhose('spark_device_id', 'spark_access_token');
$sparkhose->setEventName('event_name');
$sparkhose->consume();

日志记录

通过将 Logger(Psr/Log)实例传递给 Sparkhose 对象,你可以看到日志。

<?php

use MyApp\MyBundle\Logger\MyLogger;
use MyApp\MyBundle\Stream\Sparkhose;

$logger = new MyLogger();

$sparkhose = new Sparkhose('spark_device_id', 'spark_access_token');
$sparkhose->setLogger($logger);
$sparkhose->consume();

请注意,此库仅适用于 CLI 环境中(不嵌入到 web 脚本中并由您的 web 服务器运行)并且可能需要某种形式的多进程(例如 pcntl_fork() 或完全独立的过程以及一些关于您和您的托管提供商操作系统上多进程工作方式的知识)。以下将提供更多详细信息。

收集和处理

理解收集和处理功能分离是一个重要概念。

为了防止延迟问题和规划可扩展性,设计您的客户端具有解耦的收集、处理和持久化组件。收集组件应有效地处理连接到流式 API 并检索响应,以及在网络故障的情况下重新连接,并通过异步队列机制将状态传递给特定于应用程序的处理和持久化组件。此组件应与任何后续的下游处理或维护隔离,否则在流式 API 中将发生排队。最终,您的客户端将断开连接,导致数据丢失。

例如,从您的队列或存储中消费状态,解析它们,提取与您的应用程序相关的字段等。正是由于这个建议,唯一(必需)需要实现的方法是 enqueueStatus()。您需要决定如何管理您的原始状态的队列,但重要的是只队列它们,不要尝试在行内进行完整处理,因为这可能导致您的客户端延迟和断开连接或(可能最终)被禁止。