乐趣区

关于php:imi-助力-ChatGPT-应用开发支持优雅的-SSE-服务端推送功能

imi v2.1.45 公布,反对优雅的 SSE 服务端推送性能,文档:https://doc.imiphp.com/v2.1/components/httpserver/sse.html

SSE 介绍

SSE 是一种服务端被动向客户端(浏览器)推送数据的技术。

赫赫有名的 ChatGPT 的 API 接口就用了这项技术,实现逐字返回的打字机成果。

服务端向客户端发送一个响应头:Content-Type: text/event-stream

而后服务端按如下格局发送数据:

: 正文
data: 数据 \n
event: 事件 \n
id: id 值 \n
retry: 重试工夫距离,单位:秒 \n\n

其中每一行都是非必传项,每一行必须以 \n 结尾

\n\n 代表一次推送的完结

环境反对

名称 是否反对 备注
Swoole
Workerman
php-fpm php -S 临时有 BUG,php-fpm 可用。
RoadRunner 临时无奈实现

应用示例

use Imi\Server\Http\Message\Emitter\SseEmitter;
use Imi\Server\Http\Message\Emitter\SseMessageEvent;

/**
 * SSE.
 *
 * @Action
 */
public function sse(): void
{$this->response->setResponseBodyEmitter(new class() extends SseEmitter {protected function task(): void
        {$handler = $this->getHandler();
            // 模仿推送数据
            foreach (range(1, 100) as $i)
            {
                // 推送数据
                $handler->send((string) new SseMessageEvent((string) $i));
                usleep(10000);
            }
        }
    });
}

SseMessageEvent

Imi\Server\Http\Message\Emitter\SseMessageEvent 类是 SSE 推送事件类,构造方法参数如下:

public function __construct(
    ?string $data = null,
    ?string $event = null,
    ?string $id = null,
    ?int $retry = null,
    ?string $comment = null
)

对于 imi

imi 是一款反对长连贯微服务分布式的 PHP 开发框架,它能够运行在 PHP-FPMSwooleWorkermanRoadRunner 等多种容器环境下。

imi 提供了丰盛的根底性能:MySQLPostgreSQLRedis超强超好用的自研 ORM连接池 Web ApiWeb MVCWebSocketTCP ServerUDP ServerHTTP2MQTTgRPC 容器化(Container)依赖注入 Aop 事件 异步(Async)缓存(Cache)命令行(Command)配置化(Config)上下文(Context)定时工作(Cron)门面(Facade)验证器(Validate)锁(Lock)日志(Log)定时器(Timer)权限管制 音讯队列(RabbitMQ、Kafka、Redis)SwaggerHprose宏(Macro)限流 共享内存 Smarty 雪花算法发号器(Snowflake)Workerman GatewayInfluxDBTDengine 等组件。

同时,imi 还提供了微服务相干反对:Nacos 配置核心 etcd 配置核心Nacos 服务注册Nacos 服务发现Swoole TrackerZipkinJaegerPrometheusInfluxDB 服务指标监控TDengine 服务指标监控 负载平衡 等组件。

除此之外,imi 还提供了治理后盾开发骨架 imi-admin。

imi 框架自 2018 年 6 月 21 日首次公布以来,曾经稳固运行在许多我的项目中,例如文旅电商平台、物联网充电云平台、停车云平台、领取微服务、短信微服务、钱包微服务、卡牌游戏服务端和数据迁徙服务(虎扑)等我的项目。

  • 官网:https://www.imiphp.com/
  • Github:https://github.com/imiphp/imi
  • Gitee:https://gitee.com/yurunsoft/IMI
  • 技术支持:https://doc.imiphp.com/v2.1/base/support.html
退出移动版