forked from lovephalcon1990/plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmysqlsvr.php
More file actions
55 lines (51 loc) · 1.56 KB
/
Copy pathmysqlsvr.php
File metadata and controls
55 lines (51 loc) · 1.56 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
$serv = new swoole_server("127.0.0.1", 9508);
$serv->set(array(
'worker_num' => 10,
'task_worker_num' => 2, //MySQL连接的数量
));
function my_onReceive($serv, $fd, $from_id, $data)
{
//taskwait就是投递一条任务,这里直接传递SQL语句了
//然后阻塞等待SQL完成
$result = $serv->taskwait($data);
if ($result !== false) {
list($status, $db_res) = explode(':', $result, 2);
if ($status == 'OK') {
//数据库操作成功了,执行业务逻辑代码,这里就自动释放掉MySQL连接的占用
$serv->send($fd, pack('n',strlen(var_export(unserialize($db_res), true) . "\n")).var_export(unserialize($db_res), true) . "\n");
} else {
$serv->send($fd, pack('n',strlen($db_res)).$db_res);
}
return;
} else {
$serv->send($fd, pack('n',strlen("Error. Task timeout\n"))."Error. Task timeout\n");
}
}
function my_onTask($serv, $task_id, $from_id, $sql)
{
static $link = null;
if ($link == null) {
$link = mysqli_connect("127.0.0.1:3388", "root", "root", "fastadmin");
if (!$link) {
$link = null;
$serv->finish("ER:" . mysqli_error($link));
return;
}
}
$result = $link->query($sql);
if (!$result) {
$serv->finish("ER:" . mysqli_error($link));
return;
}
$data = $result->fetch_all(MYSQLI_ASSOC);
$serv->finish("OK:" . serialize($data));
}
function my_onFinish($serv, $data)
{
echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL;
}
$serv->on('Receive', 'my_onReceive');
$serv->on('Task', 'my_onTask');
$serv->on('Finish', 'my_onFinish');
$serv->start();