国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

AsyncTcpConnection重新連接

mazhaozi
//服務(wù)端定時(shí)發(fā)送數(shù)據(jù)
use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
define('PING_TIMEOUT', 5);
$worker = new Worker('websocket://0.0.0.0:8484');
// 進(jìn)程啟動(dòng)時(shí)設(shè)置一個(gè)定時(shí)器,定時(shí)向所有客戶端連接發(fā)送數(shù)據(jù)
$worker->onWorkerStart = function($worker)
{
    // 定時(shí),每10秒一次
    Timer::add(1, function()use($worker)
    {
        // 遍歷當(dāng)前進(jìn)程所有的客戶端連接,發(fā)送當(dāng)前服務(wù)器的時(shí)間
        foreach($worker->connections as $connection)
        {
            var_dump($connection->id);
            $connection->send(time()."\n");
        }
    });
};
// 運(yùn)行worker
Worker::runAll();

//=========客戶端8484端口接收數(shù)據(jù)
use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
define('PING_TIMEOUT', 5);

$task = new Worker();
// 進(jìn)程啟動(dòng)時(shí)異步建立一個(gè)到www.baidu.com連接對(duì)象,并發(fā)送數(shù)據(jù)獲取數(shù)據(jù)
$task->onWorkerStart = function($connection)
{
   connect($connection);
};

function connect($connection){
    $connection->lastTime = time();
    $connection_to_baidu = new AsyncTcpConnection('ws://127.0.0.1:8484');

    // 當(dāng)連接建立成功時(shí),發(fā)送http請(qǐng)求數(shù)據(jù)
    $connection_to_baidu->onConnect = function($connection_to_baidu)
    {
                 echo "connect success\n";
    };
    $connection_to_baidu->onMessage = function($connection_to_baidu, $http_buffer)
    {
        echo $http_buffer;
    };
    $connection_to_baidu->onClose = function($connection_to_baidu)use($connection)
    {
        echo "connection closed\n";
        Timer::add(1, function()use($connection) {
            $time_now = time();
            if($time_now - $connection->lastTime > PING_TIMEOUT) {
                connect($connection);
            }
        });
    };
    $connection_to_baidu->onError = function($connection_to_baidu, $code, $msg)use($connection)
    {
        echo "error $code $msg\n";
        //connect($connection);
    };
    $connection_to_baidu->connect();
}

// 運(yùn)行worker
Worker::runAll();

//如果服務(wù)端沒(méi)啟動(dòng),五秒重連 ,等一會(huì)服務(wù)端啟動(dòng)了 會(huì)有很多tcp鏈接
//如果沒(méi)有定時(shí)器,直接connect($connection); 會(huì)不停的重連,直到內(nèi)存溢出
//這個(gè)怎么處理 寫(xiě)定時(shí)器不行么(想定時(shí)重連這個(gè)websocket)

3732 2 0
2個(gè)回答

walkor 打賞

只要onclose 時(shí)重連就行了,onerror時(shí)不用設(shè)置重連,因?yàn)楫惒竭B接失敗時(shí)也會(huì)觸發(fā)onclose。另外你的定時(shí)器應(yīng)該在每次onclose時(shí)只運(yùn)行一次,而不是不斷的定時(shí)連接,不斷的連接如果服務(wù)端可連接會(huì)產(chǎn)生無(wú)數(shù)的連接,最后內(nèi)存耗盡

  • 暫無(wú)評(píng)論
mazhaozi

嗯嗯 搞定了

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??