|
@@ -0,0 +1,47 @@
|
|
|
+<?php
|
|
|
+declare(strict_types=1);
|
|
|
+
|
|
|
+namespace App\Controller;
|
|
|
+
|
|
|
+use Hyperf\HttpServer\Contract\RequestInterface;
|
|
|
+use Hyperf\HttpServer\Contract\ResponseInterface;
|
|
|
+use Psr\Http\Message\ServerRequestInterface;
|
|
|
+
|
|
|
+class SseController extends AbstractController
|
|
|
+{
|
|
|
+ public function stream(RequestInterface $request, ResponseInterface $response)
|
|
|
+ {
|
|
|
+ var_dump("===");
|
|
|
+ // 设置响应头
|
|
|
+ $response = $response
|
|
|
+ ->withAddedHeader('Access-Control-Allow-Origin', '*') // 确保允许跨域
|
|
|
+ ->withAddedHeader('Access-Control-Allow-Methods', 'GET')
|
|
|
+ ->withAddedHeader('Content-Type', 'text/event-stream')
|
|
|
+ ->withAddedHeader('Cache-Control', 'no-cache')
|
|
|
+ ->withAddedHeader('Connection', 'keep-alive');
|
|
|
+ var_dump("bbbbbbb");
|
|
|
+ $origin = $request->getHeaderLine('Origin');
|
|
|
+ if ($this->isAllowedOrigin($origin)) {
|
|
|
+ var_dump("nicde");
|
|
|
+ $response = $response->withAddedHeader('Access-Control-Allow-Origin', $origin);
|
|
|
+ $response = $response->withAddedHeader('Access-Control-Allow-Credentials', 'true');
|
|
|
+ }
|
|
|
+ // 开始流式传输
|
|
|
+ $this->container->get(\Swoole\Http\Response::class)->status(200);
|
|
|
+ for ($i = 0; $i < 10; $i++) { // 模拟发送10个事件
|
|
|
+ $data = json_encode(['message' => "Event $i"]);
|
|
|
+ var_dump("测试数据");
|
|
|
+ $response->write("data: $data\n\n");
|
|
|
+ usleep(1000000); // 暂停1秒
|
|
|
+ }
|
|
|
+ return $response;
|
|
|
+ }
|
|
|
+ protected function isAllowedOrigin(string $origin): bool
|
|
|
+ {
|
|
|
+ // 实现你的逻辑来判断是否允许该来源
|
|
|
+ // 可以是硬编码的值,也可以是从数据库或其他地方获取的动态值
|
|
|
+ $allowedOrigins = ['http://localhost:3000', 'http://192.168.1.100:3000']; // 替换为你的前端地址
|
|
|
+
|
|
|
+ return in_array($origin, $allowedOrigins, true);
|
|
|
+ }
|
|
|
+}
|