Skip to content

Commit 94d8b69

Browse files
committed
fix confict
2 parents f15eb60 + c4b477d commit 94d8b69

File tree

4 files changed

+149
-51
lines changed

4 files changed

+149
-51
lines changed

README.md

Lines changed: 89 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,51 +7,112 @@ task load balancer for php (like the nginx load balancing)
77
//define a task
88
Balancer::task('task1', function($task){
99

10-
//define a driver for `task1` like this
11-
$task->driver('driver1') //create a driver instance named 'driver1'
12-
->weight(100) //driver weight
13-
->backUp() //this driver is a back up driver
14-
->data(['this is data 1']) //data for driver work
15-
->work(function($driver, $data){ //define driver`s work
10+
//define a driver for current task like this:
11+
$task->driver('driver_1 100 backup', function($driver, $data){
12+
$person = new Person($data['name'], $data['age']);
1613
$driver->failed();
17-
$msg = 'working! by '.$driver->name.'<br>';
18-
print_r($msg);
19-
return [$msg, $data];
14+
print_r('run work! by '.$driver->name.'<br>');
15+
return ['test.driver1 working', $person->toString()];
2016
});
2117

22-
//or
23-
$task->driver('driver2')
24-
->weight(3)->backUp(false)
25-
->data(['this is data 2'])
26-
->work(function($driver, $data){
27-
$driver->success();
28-
$msg = 'working! by '.$driver->name.'<br>';
29-
print_r($msg);
30-
return [$msg, $data];
31-
});
18+
//or like this:
19+
$task->driver('driver_2', 90, function($driver, $data){
20+
$driver->failed();
21+
print_r('run work! by '.$driver->name.'<br>');
22+
return ['test.driver2 working', $data];
23+
})
24+
->data(['this is data 2']);
3225

33-
//or
34-
$task->driver('driver3')
26+
//or like this:
27+
$task->driver('driver_3 ')
3528
->weight(0)->backUp()
3629
->data(['this is data 3'])
3730
->work(function($driver, $data){
3831
$driver->failed();
39-
$msg = 'working! by '.$driver->name.'<br>';
40-
print_r($msg);
41-
return [$msg, $data];
32+
print_r('run work! by '.$driver->name.'<br>');
33+
return ['test.driver3 working', $data];
4234
});
4335
});
4436

45-
//run task
37+
//run the task
4638
$result = Balancer::run('task1');
4739
```
4840

49-
#
41+
# Method
42+
43+
1. Balancer::task($taskName, [$data, ] $work);
44+
45+
create a task instance, return task instance.
46+
47+
```php
48+
Balancer::task('taskName', $data, function($task){
49+
//task`s work
50+
});
51+
```
52+
53+
2. Balancer::run($taskName)
54+
55+
run the task, return a results array.
56+
57+
3. $task->driver($optionString, [$weight, 'backup', ] $work);
58+
59+
create a driver instance for `$task`, return driver instance.
60+
61+
**note:**$weight must be a integer
62+
63+
```php
64+
$task->driver('driverName 80 backup', function($driver, $data){
65+
//driver`s work
66+
//$driver is driver instance
67+
});
68+
```
69+
70+
4. $driver->weight($weight)
71+
72+
set driver`s weight, return current driver,
73+
supported chain operation.
74+
75+
**note:**$weight must be a integer
76+
77+
5. $driver->backup($is)
78+
79+
set driver is backup, return current driver,
80+
supported chain operation.
81+
82+
**note:**$is must be true of false
83+
84+
6. $driver->data($data);
85+
86+
set data for driver`s work use,
87+
support chain operation.
88+
89+
7. $driver->work(function($driver, $data){});
90+
91+
set driver`s work, give two arguments: $driver and $data,
92+
support chain operation.
93+
94+
8. $driver->failed()
95+
96+
set current driver run failed,
97+
support chain operation.
98+
99+
9. $driver->success()
100+
101+
set current driver run successful.
102+
support chain operation.
103+
104+
10. $driver->getDriverData()
105+
106+
get data from driver.
107+
108+
11. $driver->getTaskData()
50109

110+
get data from task.
51111

52112
# Todo
53113

54114
- [x] remember every tasks` start time and end time.
55115
- [x] remember every drivers` start time and end time.
56-
- [ ] smart parse driver`s create arguments in task class
57-
- [ ] define task`s lifecycle
116+
- [x] smart parse driver`s create arguments in task class
117+
- [ ] define task`s lifecycle and hook
118+
- [ ] pause and continue task

src/TaskBalancer/Driver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public static function create(Task $task, $name, $weight = 1, $isBackUp = false,
9292
}
9393

9494
/**
95-
* before run hook
95+
* before run driver work
9696
* @return bool
9797
*/
9898
private function beforeRun()
@@ -107,7 +107,6 @@ private function beforeRun()
107107
*/
108108
public function run()
109109
{
110-
$this->beforeRun();
111110
if (!$this->beforeRun()) {
112111
return null;
113112
}
@@ -119,7 +118,7 @@ public function run()
119118
}
120119

121120
/**
122-
* after run hook
121+
* after run driver work
123122
* @param $result
124123
*
125124
* @return mixed

src/TaskBalancer/Task.php

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,17 +273,22 @@ public function driverNameRand()
273273
return array_rand(array_keys($this->drivers));
274274
}
275275

276+
276277
/**
277278
* create a new driver instance for current task
278-
* @param $name
279-
* @param int $weight
280-
* @param bool|false $isBackup
281-
* @param \Closure|null $work
282-
*
283-
* @return mixed
279+
* @return null|static
280+
* @throws \Exception
284281
*/
285-
public function driver($name, $weight = 1, $isBackup = false, \Closure $work = null)
282+
public function driver()
286283
{
284+
$args = func_get_args();
285+
if (!count($args)) {
286+
throw new \Exception('please give task`s method `driver` some args');
287+
}
288+
extract($this->parseDriverArgs($args));
289+
if (!$name) {
290+
throw new \Exception('please set driver`s name!');
291+
}
287292
$driver = $this->getDriver($name);
288293
if (!$driver) {
289294
$driver = Driver::create($this, $name, $weight, $isBackup, $work);
@@ -296,7 +301,44 @@ public function driver($name, $weight = 1, $isBackup = false, \Closure $work = n
296301
}
297302

298303
/**
299-
* current task has driver?
304+
* parse arguments for method `driver()`
305+
* @param $args
306+
*
307+
* @return array
308+
*/
309+
private function parseDriverArgs($args)
310+
{
311+
$result = [
312+
'name' => '',
313+
'work' => null,
314+
'weight' => 1,
315+
'isBackup' => false,
316+
];
317+
foreach ($args as $arg) {
318+
//find work
319+
if (is_callable($arg)) {
320+
$result['work'] = $arg;
321+
}
322+
//find weight, backup, name
323+
if (is_string($arg) || is_numeric($arg)) {
324+
$arg = preg_replace('/\s+/', ' ', "$arg");
325+
$subArgs = explode(' ', trim($arg));
326+
foreach ($subArgs as $subArg) {
327+
if (preg_match('/^[0-9]+$/', $subArg)) {
328+
$result['weight'] = $subArg;
329+
} elseif (preg_match('/(backup)/', strtolower($subArg))) {
330+
$result['isBackup'] = true;
331+
} else {
332+
$result['name'] = $subArg;
333+
}
334+
}
335+
}
336+
}
337+
return $result;
338+
}
339+
340+
/**
341+
* current task has character driver?
300342
* @param $name
301343
*
302344
* @return bool

test/index.php

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,21 @@
1313
'age' => '25!'
1414
];
1515
$t = Balancer::task('test1', $data, function($task){
16-
$task->driver('driver1')
17-
->weight(100)->backUp()
18-
->work(function($driver, $data){
16+
$task->driver('driver_1 100 backup', function($driver, $data){
1917
$person = new Person($data['name'], $data['age']);
2018
$driver->failed();
2119
print_r('run work! by '.$driver->name.'<br>');
2220
return ['test.driver1 working', $person->toString()];
2321
});
2422

25-
$task->driver('driver2')
26-
->weight(100)
27-
->data(['this is data 2'])
28-
->work(function($driver, $data){
29-
$driver->failed();
30-
print_r('run work! by '.$driver->name.'<br>');
31-
return ['test.driver2 working', $data];
32-
});
23+
$task->driver('driver_2', 90, function($driver, $data){
24+
$driver->failed();
25+
print_r('run work! by '.$driver->name.'<br>');
26+
return ['test.driver2 working', $data];
27+
})
28+
->data(['this is data 2']);
3329

34-
$task->driver('driver3')
30+
$task->driver('driver_3 ')
3531
->weight(0)->backUp()
3632
->data(['this is data 3'])
3733
->work(function($driver, $data){

0 commit comments

Comments
 (0)