1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <?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);
- }
- }
|