经过测试,http/client 每连接一次计时器数量加一,时间长了CPU占用老高了。
是我打开方式不对还是怎么回事?
public function __construct($option = []) { $this->_option = $this->_option = array_merge($this->_option, $option); // Timer::add(1, [$this, 'closeTimeoutConnection']); // var_dump(); }
注头释掉线程池里面的定时器这一行,定时器不再增加,但是不知道线程池是不是没有了? 打算再改一改,到closeTimeoutConnection,里面close 连接的时候unset定时器不知道哪个比较科学。
每个client实例有一个定时器。业务代码复用workerman/http/client实例,不要每次都初始化一个workerman/http/client实例
非常感谢,我是要连接不同的IP的不同端口很多次去查询结果,不知道实例化应该写在哪里,能不能给提供一个例子参考。新手,真没什么概念,我先自己想,您能提供个例子就更好了。
$inner_http_worker1 = new Worker('http://0.0.0.0:2122'); // 当http客户端发来数据时触发 $inner_http_worker1->onMessage = function($http_connection, $data) { global $uidConnectionMap,$rfid,$channel; $_POST = $_POST ? $_POST : $_GET; $channel = @$_POST['channel']; $position = @$_POST['position']; $rfid = @$_POST['rfid']; //var_dump($_POST); $post = "{way_code:001,position:".$position.",RfidNo:".$rfid."}"; //$post = '{"way_code":"001","position":"1","RfidNo":"1000000002"}'; // var_dump($post); $http = new Workerman\Http\Client(); //var_dump($channel); //$http->post('http://172.50.10.2:7090/facematch/v1/request', $post, function($response) { $http->post('http://'.$channel.':7090/facematch/v1/request', $post, function($response){ // var_dump($response->getStatusCode()); $data = json_decode($response->getBody(),true); // var_dump($data); echo ($response->getBody()); if ($data['Content'] != null && $data['Status'] == 1){ // var_dump($response->getBody()); new passenger($response->getBody(),$GLOBALS['channel']); } //global $rfid; // var_dump($GLOBALS['rfid']); }, function($exception){ $ident = 'FR2SAC'; new logErr($ident,$exception); // echo $exception; }); return $http_connection->send('1'); };` $inner_http_worker->listen(); //比方说这段代码,我多次的post url 和数据,让httpclient去取结果,我没编过程,没参考代码我就不知道怎么弄了。
改好了,今天去服务器上更新一下。 昨天下午注释掉了定时器那行,在生产中运行,今天去应该程序还没什么问题。看了定时器的用法,才明白定时器那行是每秒去做一次超时连接断开。
在 onWorkerStart 回调中实例化 http/Client
说来惭愧,我知道在onWorkerStart中实例化,但在$inner_http_worker1->onMessage中老提示没定义这个变量,网上找了老半天才知道怎么弄,没编过程的人对代码一点概念都没有。
好在,有worker这样的大师级的人物写出了这么好用的框架,再加上有这么多高手网上给解决问题提出意见。
是我打开方式不对还是怎么回事?
每个client实例有一个定时器。业务代码复用workerman/http/client实例,不要每次都初始化一个workerman/http/client实例
非常感谢,我是要连接不同的IP的不同端口很多次去查询结果,不知道实例化应该写在哪里,能不能给提供一个例子参考。新手,真没什么概念,我先自己想,您能提供个例子就更好了。
改好了,今天去服务器上更新一下。
昨天下午注释掉了定时器那行,在生产中运行,今天去应该程序还没什么问题。看了定时器的用法,才明白定时器那行是每秒去做一次超时连接断开。
在 onWorkerStart 回调中实例化 http/Client
说来惭愧,我知道在onWorkerStart中实例化,但在$inner_http_worker1->onMessage中老提示没定义这个变量,网上找了老半天才知道怎么弄,没编过程的人对代码一点概念都没有。
好在,有worker这样的大师级的人物写出了这么好用的框架,再加上有这么多高手网上给解决问题提出意见。