<?php
require_once __DIR__.'/vendor/autoload.php';
use Workerman\Worker;
$tcp_worker = new Worker('tcp://127.0.0.1:1234');
$tcp_worker->count = 1;
$tcp_worker->onWorkerStart = function (){
//方法一:全局变量+参照官方文档创建一次对象
global $http_client;
$http_client = new Workerman\Http\Client();
//方法二:全局变量+用类包装一下
global $client;
$client = new myClient();
};
$tcp_worker->onMessage = function ($connection,$data){
//方法一:获取全局变量
global $http_client;
//方法一:调用全局变量
$http_client->get('http://www.example.com/',
function($response){
var_dump($response->getStatusCode());
echo $response->getBody();
},
function($exception){
echo $exception;
});
//方法二:获取全局变量(类封装)
global $client;
//方法二:调用全局变量
$client->instance()->get('http://www.example.com',
function ($response){
var_dump($response->getStatusCode());
echo $response->getBody();
},
function ($exception){
echo $exception;
});
//方法三:单例用法:
Singleton::getInstance()->get('http://www.example.com',
function ($response){
var_dump($response->getStatusCode());
echo $response->getBody();
},
function ($exception){
echo $exception;
});
};
Worker::runAll();
//类封装
class myClient{
public $instance;
public function instance(){
if (!$this->instance){
$this->instance = new Workerman\Http\Client();
}
return $this->instance;
}
}
//单例
class Singleton{
//创建静态私有的变量保存该类的对象
static private $instance;
//防止使用new直接创建对象
private function __construct(){}
//防止使用clone克隆对象
private function __clone(){}
static public function getInstance(){
//判断$instance是否是http_client的对象,不是则创建
if (!self::$instance instanceof Workerman\Http\Client ){
self::$instance = new Workerman\Http\Client();
}
return self::$instance;
}
}
```贴上代码,供新手学习,高手指点。
高级点的用类包装下。
用的时候直接
非常感谢
第二处方法,是不需要在onWorkerStart中实例化对象,直接在onMessage中使用单例么?如果是这样,那myClient类是不是要加上static 关键字?
需要static