【问题标题】:Ratchet wsserver's enableKeepAlive isn't closing connections?Ratchet wsserver 的 enableKeepAlive 没有关闭连接?
【发布时间】:2017-11-18 20:51:37
【问题描述】:

信息

enableKeepAlive 配置似乎不起作用,文档甚至没有解释如何正确设置它。 http://socketo.me/docs/websocket

我通过使用手机打开连接然后关闭 wifi 和数据来测试它。客户端从未断开连接。

我的代码:chat-server.php

<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\OriginCheck;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';

$loop = React\EventLoop\Factory::create();
$loop->run();
$checkedApp = new WsServer( new Chat() );
$checkedApp->enableKeepAlive($loop, 5);
//$checkedApp = new OriginCheck(new WsServer( new Chat() ), array('localhost'));
$checkedApp = new OriginCheck($checkedApp);
$checkedApp->allowedOrigins[] = 'mywebsite.com';

$server = IoServer::factory(
    new HttpServer(
        $checkedApp
    ),
    8082
);

//works, so loop works
/*
$server->loop->addPeriodicTimer(5, function () use ($server) {        
    foreach ($server->app->clients as $client) {                  
            $client->send("hello client");          
    }
});
*/

$server->run();

【问题讨论】:

    标签: php ratchet


    【解决方案1】:

    太棒了,所以它被覆盖在这个页面上: http://socketo.me/docs/migration-3

    创建服务器后,然后启用KeepAlive:

    <?php
    use Ratchet\Server\IoServer;
    use Ratchet\Http\OriginCheck;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use MyApp\Chat;
    
    require dirname(__DIR__) . '/vendor/autoload.php';
    
    //$loop = React\EventLoop\Factory::create();
    //$loop->run();
    $checkedApp = new WsServer( new Chat() );
    //$checkedApp->enableKeepAlive($loop, 5);
    //$checkedApp = new OriginCheck(new WsServer( new Chat() ), array('localhost'));
    $checkedAppToPass = new OriginCheck($checkedApp);
    $checkedAppToPass->allowedOrigins[] = 'mywebsite.com';
    
    $server = IoServer::factory(
        new HttpServer(
            $checkedAppToPass
        ),
        8082
    );
    
    $checkedApp->enableKeepAlive($server->loop, 10);
    
    //works, so loop works
    /*
    $server->loop->addPeriodicTimer(5, function () use ($server) {        
        foreach ($server->app->clients as $client) {                  
                $client->send("hello client");          
        }
    });
    */
    
    $server->run();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      相关资源
      最近更新 更多