使用 ab 测试
1
|
$ ab -t 20 -c 10 http: //192.168.1.104:9509/ |
二、利用文件排他锁 (阻塞模式)
阻塞模式下,如果进程在获取文件排他锁时,其它进程正在占用锁的话,此进程会挂起等待其它进程释放锁后,并自己获取到锁后,再往下执行。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php $http = new swoole_http_server( "0.0.0.0" , 9510); $http-> set (array( 'reactor_num' => 2, //reactor thread num 'worker_num' => 4 //worker process num )); $http-> on ( 'request' , function (swoole_http_request $request, swoole_http_response $response) { $uniqid = uniqid( 'uid-' , TRUE); $redis = new Redis(); $redis->connect( '127.0.0.1' , 6379); $fp = fopen( "lock.txt" , "w+" ); // 阻塞(等待)模式, 要取得独占锁定(写入的程序) if (flock($fp,LOCK_EX)) { //锁定当前指针 // 成功取得锁后,放心处理订单 $rest_count = intval($redis-> get ( "rest_count" )); $value = "{$rest_count}-{$uniqid}" ; if ($rest_count > 0) { // do something ... $rand = rand(100, 1000000); $sum = 0; for ($i = 0; $i < $rand; $i++) {$sum += $i;} $redis->lPush( 'uniqids' , $value); $redis->decr( 'rest_count' ); } // 订单处理完成后,再释放锁 flock($fp, LOCK_UN); } fclose($fp); }); $http->start(); |