-
Notifications
You must be signed in to change notification settings - Fork 35
/
mysql-http-server.php
69 lines (64 loc) · 1.92 KB
/
mysql-http-server.php
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
class HttpMySQLServer
{
static $frontendCloseCount = 0;
static $backends = array();
static $serv;
static $mysqlServerConfig = array(
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root',
'password' => 'root',
'database' => 'test',
);
}
$serv = new swoole_http_server('127.0.0.1', 9512, SWOOLE_BASE);
//$serv = new swoole_http_server('127.0.0.1', 9510, SWOOLE_PROCESS);
//$serv->set(array('worker_num' => 8));
$serv->on('Close', function ($serv, $fd, $reactorId)
{
echo "client[{$fd}] is closed\n";
//清理掉后端连接
if (isset(HttpMySQLServer::$backends[$fd]))
{
//debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$db = HttpMySQLServer::$backends[$fd];
$db->close();
unset(HttpMySQLServer::$backends[$fd]);
}
});
$serv->on('Request', function (swoole_http_request $req, swoole_http_response $resp)
{
$fd = $req->fd;
if (!isset(HttpMySQLServer::$backends[$fd]))
{
$db = new swoole_mysql;
$db->on('close', function ($db) use ($fd)
{
echo "mysql-client[{$fd}#{$db->sock}] is closed\n";
});
$db->connect(HttpMySQLServer::$mysqlServerConfig, function ($db, $result) use ($fd, $resp)
{
HttpMySQLServer::$backends[$fd] = $db;
if ($result === false)
{
var_dump($db->error, $db->errno);
die();
}
$db->query("show tables", function ($db, $res) use ($resp)
{
$resp->end("<pre>mysql_result=" . var_export($res, true) . "</pre>");
});
});
}
else
{
$db = HttpMySQLServer::$backends[$fd];
$db->query("show tables", function ($db, $res) use ($resp)
{
$resp->end("<pre>mysql_result=" . var_export($res, true) . "</pre>");
});
}
});
HttpMySQLServer::$serv = $serv;
$serv->start();