Skip to content

Commit d11efb2

Browse files
committed
修复握手响应返回后写入连接上下文,导致有时刚握手完 WebSocket 通讯获取连接上下文数据不正确的问题
1 parent 0974360 commit d11efb2

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

src/Server/WebSocket/Listener/BeforeHandShake.php

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,7 @@ public function handle(HandShakeEventParam $e)
4343

4444
// 中间件
4545
$dispatcher = RequestContext::getServerBean('HttpDispatcher');
46-
$response = $dispatcher->dispatch($e->request, $e->response);
47-
if(StatusCode::SWITCHING_PROTOCOLS === $response->getStatusCode())
48-
{
49-
// http 路由解析结果
50-
$routeResult = RequestContext::get('routeResult');
51-
$routeResult->routeItem->callable = null;
52-
$routeResult->callable = null;
53-
ConnectContext::muiltiSet([
54-
'httpRouteResult' => $routeResult,
55-
'uri' => $e->request->getUri(),
56-
]);
57-
58-
$server = $e->getTarget();
59-
$request = $e->request;
60-
$server->trigger('open', [
61-
'server' => &$server,
62-
'request' => &$request,
63-
], $this, OpenEventParam::class);
64-
}
46+
$dispatcher->dispatch($e->request, $e->response);
6547
}
6648

6749
}

src/Server/WebSocket/Middleware/HandShakeMiddleware.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
<?php
22
namespace Imi\Server\WebSocket\Middleware;
33

4+
use Imi\ConnectContext;
5+
use Imi\RequestContext;
46
use Imi\Bean\Annotation\Bean;
57
use Imi\Util\Http\Consts\StatusCode;
68
use Psr\Http\Message\ResponseInterface;
79
use Psr\Http\Server\MiddlewareInterface;
10+
use Imi\Server\Event\Param\OpenEventParam;
811
use Psr\Http\Message\ServerRequestInterface;
912
use Psr\Http\Server\RequestHandlerInterface;
1013

@@ -24,6 +27,23 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
2427
// 未做处理则做默认握手处理
2528
$response = $this->defaultHandShake($request, $response);
2629
}
30+
if(StatusCode::SWITCHING_PROTOCOLS === $response->getStatusCode())
31+
{
32+
// http 路由解析结果
33+
$routeResult = RequestContext::get('routeResult');
34+
$routeResult->routeItem->callable = null;
35+
$routeResult->callable = null;
36+
ConnectContext::muiltiSet([
37+
'httpRouteResult' => $routeResult,
38+
'uri' => $request->getUri(),
39+
]);
40+
41+
$server = RequestContext::get('server');
42+
$server->trigger('open', [
43+
'server' => &$server,
44+
'request' => &$request,
45+
], $this, OpenEventParam::class);
46+
}
2747
return $response;
2848
}
2949

0 commit comments

Comments
 (0)