rkljw 5 luni în urmă
părinte
comite
81400824cf

+ 2 - 1
app/Controller/MessageController.php

@@ -31,11 +31,12 @@ class MessageController extends AbstractController
             // 获取 Swoole WebSocket Server 实例
             $server = \Hyperf\Context\ApplicationContext::getContainer()->get(\Swoole\Server::class);
             $redisClient = new RedisService();
-    
+            var_dump($adminList, '-------------&&&&&&&&&&&&&&&&&&&&&&----');
             if ($adminList && isset($adminList['data'])) {
                 foreach ($adminList['data'] as $admin) {
                     $fd = $redisClient->findFd((int)$admin['id']);
                     if ($fd && $server->isEstablished((int)$fd)) {
+                        var_dump($fd, '-------------&&&&&&&&&&&&&&&&&&&&&&----');
                         $server->push((int)$fd, json_encode($data));
                     }
                 }

+ 6 - 0
app/Controller/WebSocketController.php

@@ -479,4 +479,10 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
             $server->close($fd);
         }
     }
+    // 握手回调(使用 Hyperf 内置的,不要自定义阻断逻辑)
+    public function onHandShake($server, $request, $response)
+    {
+        // 直接使用 Hyperf 内置的握手处理(标准流程)
+        return \Hyperf\WebSocketServer\Server::onHandShake($server, $request, $response);
+    }
 }

+ 1 - 1
app/Middleware/Auth/WebMiddleware.php

@@ -41,7 +41,7 @@ class WebMiddleware implements MiddlewareInterface
     {
 
         $header = $request->getHeaders();
-        var_dump("==============header:",$header);
+        // var_dump("==============header:",$header);
         try {
             if($header &&  isset($header['siteid']) && $header['siteid'][0]!='null' && isset($header['siteid'][0])){
                 Context::set("SiteId",intval($header['siteid'][0]));

+ 9 - 0
config/autoload/server.php

@@ -38,6 +38,15 @@ return [
                 Event::ON_MESSAGE => [Hyperf\WebSocketServer\Server::class, 'onMessage'],
                 Event::ON_CLOSE => [Hyperf\WebSocketServer\Server::class, 'onClose'],
             ],
+            'settings' => [
+                // 关键:设置连接最大闲置时间(秒),0 表示永不超时
+                'max_idle_time' => 300, // 例如设置为 5 分钟
+                // 其他可能相关的配置
+                'open_tcp_keepalive' => 1, // 开启 TCP 保活机制
+                'tcp_keepidle' => 60, // 60 秒内无数据则发送保活探针
+                'tcp_keepinterval' => 10, // 探针间隔 10 秒
+                'tcp_keepcount' => 3, // 探针失败 3 次后关闭连接
+            ],
         ],
     ],
     'settings' => [