共计 1855 个字符,预计需要花费 5 分钟才能阅读完成。
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-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