//服務(wù)端定時發(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');
// 進程啟動時設(shè)置一個定時器,定時向所有客戶端連接發(fā)送數(shù)據(jù)
$worker->onWorkerStart = function($worker)
{
// 定時,每10秒一次
Timer::add(1, function()use($worker)
{
// 遍歷當(dāng)前進程所有的客戶端連接,發(fā)送當(dāng)前服務(wù)器的時間
foreach($worker->connections as $connection)
{
var_dump($connection->id);
$connection->send(time()."\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();
// 進程啟動時異步建立一個到www.baidu.com連接對象,并發(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)連接建立成功時,發(fā)送http請求數(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();
}
// 運行worker
Worker::runAll();
//如果服務(wù)端沒啟動,五秒重連 ,等一會服務(wù)端啟動了 會有很多tcp鏈接
//如果沒有定時器,直接connect($connection); 會不停的重連,直到內(nèi)存溢出
//這個怎么處理 寫定時器不行么(想定時重連這個websocket)