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: 数据\nevent: 事件\nid: id值\nretry: 重试工夫距离,单位:秒\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-FPM
、Swoole
、Workerman
和 RoadRunner
等多种容器环境下。
imi 提供了丰盛的根底性能:MySQL
、PostgreSQL
、Redis
、超强超好用的自研 ORM
、连接池
、Web Api
、Web MVC
、WebSocket
、TCP Server
、UDP Server
、HTTP2
、MQTT
、gRPC
、容器化(Container)
、依赖注入
、Aop
、事件
、异步(Async)
、缓存(Cache)
、命令行(Command)
、配置化(Config)
、上下文(Context)
、定时工作(Cron)
、门面(Facade)
、验证器(Validate)
、锁(Lock)
、日志(Log)
、定时器(Timer)
、权限管制
、音讯队列(RabbitMQ、Kafka、Redis)
、Swagger
、Hprose
、宏(Macro)
、限流
、共享内存
、Smarty
、雪花算法发号器(Snowflake)
、Workerman Gateway
、InfluxDB
和 TDengine
等组件。
同时,imi 还提供了微服务相干反对:Nacos 配置核心
、etcd 配置核心
、Nacos 服务注册
、Nacos 服务发现
、Swoole Tracker
、Zipkin
、Jaeger
、Prometheus
、InfluxDB 服务指标监控
、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