This commit is contained in:
lq 2024-05-31 14:57:01 +08:00
parent 2bcb4b7c7f
commit 54121da25a
16 changed files with 1227 additions and 309 deletions

View File

@ -14,7 +14,11 @@ use Core\http\Response;
use Core\init\MyDB; use Core\init\MyDB;
use Core\init\RedisHelper; use Core\init\RedisHelper;
use DI\Attribute\Inject; use DI\Attribute\Inject;
use Hyperf\Database\Connection;
use Mockery;
use \PDO;
use Hyperf\Database\Query\Grammars\MySqlGrammar;
use Core\BeanFactory;
/** /**
* @Bean() * @Bean()
*/ */
@ -38,6 +42,11 @@ class UserController
*/ */
public function test() public function test()
{ {
///$connection = new Connection(PDO::class);
///$connection = $connection->setQueryGrammar(new MySqlGrammar());
///$sql = $connection->table('eb_user')->toSql();
// var_dump($connection->query($sql));
//var_dump($user);
//$this->db->select('select sleep(1)'); //$this->db->select('select sleep(1)');
//User::query('select sleep(3)'); //User::query('select sleep(3)');
$user = User::first(); $user = User::first();
@ -49,6 +58,7 @@ class UserController
*/ */
public function user(int $uid, Request $request, Response $response) public function user(int $uid, Request $request, Response $response)
{ {
//BeanFactory::getBean('');
//$user = $this->db->select('select * from eb_user where id = 1'); //$user = $this->db->select('select * from eb_user where id = 1');
return ['code' => 1, 'uid' => $uid]; return ['code' => 1, 'uid' => $uid];
} }

View File

@ -2,13 +2,13 @@
require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . "/app/config/define.php"; require_once __DIR__ . "/app/config/define.php";
\Swoole\Runtime::enableCoroutine(true); \Swoole\Runtime::enableCoroutine(true);
// command swoole-cli boot.php start
use Swoole\Process; use Swoole\Process;
use Core\server\HttpServer;
if ($argc == 2) { if ($argc == 2) {
$cmd = $argv[1]; $cmd = $argv[1];
if ($cmd == 'start') { if ($cmd == 'start') {
$http = new Core\server\HttpServer('first'); $http = new HttpServer();
$http->run(); $http->run();
} else if ($cmd == 'stop') { } else if ($cmd == 'stop') {
$getpid = intval(file_get_contents("./Buddha.pid")); //获取上一次程序运行的 master_id $getpid = intval(file_get_contents("./Buddha.pid")); //获取上一次程序运行的 master_id
@ -21,7 +21,7 @@ if ($argc == 2) {
if ($getpid && trim($getpid) != 0) { if ($getpid && trim($getpid) != 0) {
Process::kill($getpid); Process::kill($getpid);
sleep(1); sleep(1);
$http = new Core\server\HttpServer('first'); $http = new Core\server\HttpServer();
echo "restart done" . PHP_EOL; echo "restart done" . PHP_EOL;
$http->run(); $http->run();
} else { } else {

14
common/functions.php Normal file
View File

@ -0,0 +1,14 @@
<?php
if (! function_exists('env')) {
/**
* Gets the value of an environment variable.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
function env($key, $default = null)
{
return Env::get($key, $default);
}
}

View File

@ -7,7 +7,10 @@
"psr-4": { "psr-4": {
"App\\": "app/", "App\\": "app/",
"Core\\":"core/" "Core\\":"core/"
} },
"files": [
"common/functions.php"
]
}, },
"authors": [ "authors": [
{ {
@ -19,6 +22,7 @@
"nikic/fast-route": "^1.3", "nikic/fast-route": "^1.3",
"php-di/php-di": "^7.0", "php-di/php-di": "^7.0",
"doctrine/annotations": "^2.0.1", "doctrine/annotations": "^2.0.1",
"illuminate/database": "^10.48" "illuminate/database": "^10.48",
"hyperf/database": "^3.1"
} }
} }

1158
composer.lock generated

File diff suppressed because it is too large Load Diff

22
config/databases.php Normal file
View File

@ -0,0 +1,22 @@
<?php
return [
'default' => [
'driver' => env('DB_DRIVER', 'mysql'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', 3306),
'database' => env('DB_DATABASE', 'hyperf'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'collation' => env('DB_COLLATION', 'utf8_unicode_ci'),
'prefix' => env('DB_PREFIX', ''),
'pool' => [
'min_connections' => 1,
'max_connections' => 10,
'connect_timeout' => 10.0,
'wait_timeout' => 3.0,
'heartbeat' => -1,
'max_idle_time' => (float)env('DB_MAX_IDLE_TIME', 60),
]
],
];

View File

@ -21,10 +21,9 @@ class BeanFactory
//初始容器Builder //初始容器Builder
$builder = new ContainerBuilder(); $builder = new ContainerBuilder();
//启用注释 主要是用它的Inject注释 //启用注释 主要是用它的Inject注释
$builder->useAttributes(true); $builder->useAttributes(false);
//容器初始化 //容器初始化
self::$container = $builder->build(); self::$container = $builder->build();
$handlers = glob(ROOT_PATH . "/core/annotationhandlers/*.php"); $handlers = glob(ROOT_PATH . "/core/annotationhandlers/*.php");
foreach ($handlers as $handler) { foreach ($handlers as $handler) {
self::$handlers = array_merge(self::$handlers, require_once($handler)); self::$handlers = array_merge(self::$handlers, require_once($handler));
@ -86,6 +85,9 @@ class BeanFactory
//AnnotationRegistry::loadAnnotationClass($class); //AnnotationRegistry::loadAnnotationClass($class);
//获取所有类的注释 //获取所有类的注释
$classAnnos = $reader->getClassAnnotations($refClass); $classAnnos = $reader->getClassAnnotations($refClass);
if ($refClass->getName() == 'Core\server\HttpServer') {
continue;
}
$instance = self::$container->get($refClass->getName()); $instance = self::$container->get($refClass->getName());
foreach ($classAnnos as $classAnno) { foreach ($classAnnos as $classAnno) {
//根据注释的类型获取对应处理方法 //根据注释的类型获取对应处理方法

View File

@ -4,15 +4,19 @@ namespace Core\server;
use Swoole\Http\Server; use Swoole\Http\Server;
use Core\init\TestProcess; use Core\init\TestProcess;
use Core\BeanFactory;
#[Injectable(lazy: true)]
class HttpServer class HttpServer
{ {
private $server; private $server;
private $dispatcher; private $dispatcher;
public function __construct($str = 'dd') private $host = 'localhost';
private $port = 8086;
public function __construct()
{ {
if ($str == 'dd') return; $this->server = new Server($this->host,$this->port);
$this->server = new Server("0.0.0.0",8085); echo 'host: http://' . $this->host . ':' . $this->port . PHP_EOL;
//配置参数 https://wiki.swoole.com/#/server/setting //配置参数 https://wiki.swoole.com/#/server/setting
$this->server->set(array( $this->server->set(array(
'worker_num' => 2, //设置启动的 Worker 进程数。【默认值CPU 核数】 'worker_num' => 2, //设置启动的 Worker 进程数。【默认值CPU 核数】
@ -53,10 +57,12 @@ class HttpServer
switch($routeInfo[0]) { switch($routeInfo[0]) {
case \FastRoute\Dispatcher::NOT_FOUND: case \FastRoute\Dispatcher::NOT_FOUND:
$response->status(404); $response->status(404);
$response->write(json_encode(['code' => 404, 'msg' => 'NOT_FOUND']));
$response->end(); $response->end();
break; break;
case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED: case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
$response->status(405); $response->status(405);
$response->write(json_encode(['code' => 405, 'msg' => 'METHOD_NOT_ALLOWED']));
$response->end(); $response->end();
break; break;
case \FastRoute\Dispatcher::FOUND: case \FastRoute\Dispatcher::FOUND:

View File

@ -1,35 +0,0 @@
<?php
use Swoole\Http\Server;
use Swoole\Process;
if ($argc==2){
$cmd = $argv[1];
var_dump($argv);
if ($cmd=='start'){
$http = new Swoole\Http\Server('0.0.0.0',80);
//配置参数 https://wiki.swoole.com/#/server/setting
$http->set(array(
'worker_num'=>1, //设置启动的 Worker 进程数。【默认值CPU 核数】
'daemonize'=>false // 使用docker 不需要设置守护进程
));
$http->on('request',function ($req,$res){
});
$http->on('Start',function (Server $server ){
$mid = $server->master_pid; //返回当前服务器主进程的 PID。
file_put_contents("./ttt.pid",$mid); //会覆盖
});
$http->start();
} elseif ($cmd=='stop'){
$mid = intval(file_get_contents("./ttt.pid"));
if (trim($mid)){
Process::kill($mid);
}
} else {
echo '无效命令';
}
} else {
echo '无效命令';
}

View File

@ -1,8 +0,0 @@
<?php
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__."/app/config/define.php";
$db = new \Core\init\MyDB();
$users = $db->table('user')->get();
foreach ($users as $user){
echo $user->nickname;
}

View File

@ -1,11 +0,0 @@
<?php
$a = 444;
try {
$b = 10 / 0;
}catch (Exception $e) {
//echo $e->getMessage();
} finally {
var_dump('hahaha cuo la ba');
}

View File

@ -1,24 +0,0 @@
<?php
require __DIR__."/vendor/autoload.php";
go(function (){
$pool = new \baihand\pool\CoMySqlPool();
$pool->initPool();
for ($i = 0; $i < 5; $i++) {
go(function () use($pool,$i) {
$conn = $pool->getConnection();
defer(function () use ($pool,$conn){
//defer写在前 是怕后面的执行语句不一定成功
$pool->close($conn); // 放回链接
//channel对connection进行了引用
});
$state = $conn->query(" select $i");
var_dump($state);
});
}
while (true){
echo "链接了\n";
\Swoole\Coroutine::sleep(1);
}
});

View File

@ -1,8 +0,0 @@
<?php
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__."/app/config/define.php";
Core\BeanFactory::init();
$routerCollector= \Core\BeanFactory::getBean("RouterCollector");
var_dump($routerCollector->routes);

View File

@ -1,171 +0,0 @@
Exception: STATUS_ACCESS_VIOLATION at rip=0001008C745A
rax=00000001008308E0 rbx=0000000A005440B0 rcx=0000000000000000
rdx=0000000000000000 rsi=00000007FFFF8F10 rdi=0000000000000058
r8 =0000000000000000 r9 =0000000A0012F108 r10=0000000800000000
r11=00000003FF76D542 r12=0000000000000000 r13=00006FFFFFDD0008
r14=00000007FFFF8FA0 r15=0000000100B7F110
rbp=00000001015C881F rsp=00000007FFFF8E20
program=D:\software\swoole-cli\bin\swoole-cli.exe, pid 514, thread main
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame Function Args
0001015C881F 0001008C745A (000000000050, 0001015C881F, 0001015C87F0, 6FFFFFDD0008) swoole-cli.exe+0x4C745A
0001015C881F 0001008CED83 (000A00000010, 0000000001D3, 000A0052E228, 000000000000) swoole-cli.exe+0x4CED83
0001015C881F 00010090A9F4 (7FFDE0E60453, 000000000088, 000000002028, 000100911940) swoole-cli.exe+0x50A9F4
00010171FBA0 000100922BC9 (000100922940, 00000000000C, 6FFFFFE134C0, 6FFFFF617C58) swoole-cli.exe+0x522BC9
000000200308 0001009231A2 (000100B7F030, 000A003C4C30, 000100A6A343, 000A004169A8) swoole-cli.exe+0x5231A2
000000200308 00010091AA75 (6FFFFFFB4710, 6FFFFFE132C0, 6FFFFFF04008, 6FFFFFE13350) swoole-cli.exe+0x51AA75
000000200308 0001008A4A4A (0007FFFF9320, 000000000003, 000000000008, 6FFFFFE13330) swoole-cli.exe+0x4A4A4A
000000200308 000100A4BA74 (0001017238E0, 6FFFFFE77D00, 0001009F00C6, 000000000000) swoole-cli.exe+0x64BA74
000000000000 000100A4DA72 (000700000008, 0007FFFFA630, 0007FFFFB8B0, 0007FFFFCC38) swoole-cli.exe+0x64DA72
0007FFFF9320 0001009E2A2B (0001009CA40D, 000000000000, 000000000000, 0007FFFFB810) swoole-cli.exe+0x5E2A2B
0007FFFFA380 00010097E3E3 (00010097C6F0, 000100BBCEE8, 00010097C6E0, 000700000000) swoole-cli.exe+0x57E3E3
000000000000 000100AC434D (0007FFFFCC30, 000000000025, 0000FF52424B, 0007FFFFCA84) swoole-cli.exe+0x6C434D
000000000000 000100BDD758 (0007FFFFCC30, 000000000000, 7FFD49F48035, 0007FFFFCC50) swoole-cli.exe+0x7DD758
0007FFFFCD30 7FFD49F480A1 (000000000000, 000000000000, 000000000000, 000000000000) cygwin1.dll+0x80A1
0007FFFFFFF0 7FFD49F45C86 (000000000000, 000000000000, 000000000000, 000000000000) cygwin1.dll+0x5C86
0007FFFFFFF0 7FFD49F45D34 (000000000000, 000000000000, 000000000000, 000000000000) cygwin1.dll+0x5D34
End of stack trace
Loaded modules:
000100400000 swoole-cli.exe
7FFDE0E50000 ntdll.dll
7FFDDF570000 KERNEL32.DLL
7FFDDE170000 KERNELBASE.dll
0003F3A30000 cygMagickCore-7.Q16HDRI-7.dll
0003F38F0000 cygMagickWand-7.Q16HDRI-7.dll
0003FFE60000 cygbrotlidec-1.dll
7FFDDF190000 ADVAPI32.dll
0003F3540000 cygbrotlienc-1.dll
7FFDE05C0000 msvcrt.dll
0003FFE40000 cygbz2-1.dll
7FFDDF410000 sechost.dll
0003F33C0000 cygcares-2.dll
7FFDDE520000 bcrypt.dll
7FFDDEB80000 RPCRT4.dll
0003FFAB0000 cygcurl-4.dll
7FFDE03D0000 GDI32.dll
7FFDDE550000 win32u.dll
7FFD49F40000 cygwin1.dll
0003FFB60000 cygcrypto-1.1.dll
0003F41C0000 cygexslt-0.dll
7FFDDE580000 gdi32full.dll
7FFDDE7C0000 msvcp_win.dll
0003FF580000 cyggmp-10.dll
7FFDDE6A0000 ucrtbase.dll
7FFDDEF30000 USER32.dll
0003F2980000 cygfreetype-6.dll
0003F20F0000 cygicui18n72.dll
0003F23D0000 cygiconv-2.dll
0003EEAE0000 cygjpeg-8.dll
0003F1F30000 cygicuuc72.dll
0003FF4F0000 cygicuio72.dll
0003EE7B0000 cygonig-5.dll
0003EE570000 cygpng16-16.dll
0003FE600000 cygreadline7.dll
0003FE470000 cygssl-1.1.dll
0003FDF20000 cygxml2-2.dll
0003F4180000 cygxslt-1.dll
0003F5940000 cygsqlite3-0.dll
0003EDC80000 cygyaml-0-2.dll
0003FDF00000 cygz.dll
0003ED690000 cygzip-5.dll
0003FF760000 cyggcc_s-seh-1.dll
0003FE290000 cygstdc++-6.dll
0003F37B0000 cygX11-6.dll
0003F3730000 cygXext-6.dll
0003FF540000 cyggomp-1.dll
0003F3420000 cygcairo-2.dll
0003F3380000 cygcgraph-6.dll
0003F3160000 cygdjvulibre-21.dll
0003F2B80000 cygfontconfig-1.dll
0003F2AE0000 cygfpx-1.dll
0003F2F20000 cygfftw3-3.dll
0003F2590000 cygglib-2.0-0.dll
0003F2520000 cyggobject-2.0-0.dll
0003EC0E0000 cyggs-9.dll
0003EEBA0000 cygjbig-2.dll
0003EEA80000 cyglcms2-2.dll
0003F0E70000 cyggvc-6.dll
0003EEA60000 cyglqr-1-0.dll
0003FED10000 cyglzma-5.dll
0003EE700000 cygpango-1.0-0.dll
0003EE6E0000 cygpangocairo-1.0-0.dll
0003EE240000 cygraqm-0.dll
0003EE020000 cygrsvg-2-2.dll
0003EDD80000 cygwebp-7.dll
0003FFE80000 cygbrotlicommon-1.dll
0003EE060000 cygraw_r-16.dll
0003EDE10000 cygtiff-6.dll
0003EDD30000 cygwebpdemux-2.dll
0003EDD10000 cygwebpmux-3.dll
0003FE750000 cygidn2-0.dll
0003FF4A0000 cyggssapi_krb5-2.dll
0003FF730000 cyggsasl-18.dll
0003FEF80000 cyglber-2.dll
0003FEE60000 cygldap-2.dll
0003FE710000 cygnghttp2-14.dll
0003FE6B0000 cygpsl-5.dll
0003FE500000 cygssh2-1.dll
0003FDE50000 cygzstd-1.dll
0003FF640000 cyggcrypt-20.dll
0003EA300000 cygicudata72.dll
0003FE9B0000 cygncursesw-10.dll
0003ED720000 cygcrypto-1.0.0.dll
0003EDCE0000 cygxcb-1.dll
0003EE5D0000 cygpixman-1-0.dll
0003EDCC0000 cygxcb-render-0.dll
0003EDCB0000 cygxcb-shm-0.dll
0003F3670000 cygXrender-1.dll
0003F33A0000 cygcdt-5.dll
0003FF810000 cygexpat-1.dll
0003FF2E0000 cygintl-8.dll
0003FE0A0000 cyguuid-1.dll
0003FE7B0000 cygpcre-1.dll
0003FF7A0000 cygffi-6.dll
0003F3610000 cygXt-6.dll
0003FF370000 cygidn-12.dll
0003EE6A0000 cygpaper-1.dll
0003F5E50000 cygtiff-7.dll
0003F3FE0000 cygltdl-7.dll
0003EE680000 cygpathplan-4.dll
0003EDE90000 cygthai-0.dll
0003EE6C0000 cygpangoft2-1.0-0.dll
0003F2960000 cygfribidi-0.dll
0003F5ED0000 cygharfbuzz-0.dll
0003F3330000 cygcroco-0.6-3.dll
0003F2820000 cyggdk_pixbuf-2.0-0.dll
0003F2690000 cyggio-2.0-0.dll
0003FEDB0000 cygsharpyuv-0.dll
0003EEBC0000 cygjasper-4.dll
0003F3300000 cygdeflate-0.dll
0003FF0D0000 cygk5crypto-3.dll
0003FF000000 cygkrb5-3.dll
0003FEFE0000 cygkrb5support-0.dll
0003FFE30000 cygcom_err-2.dll
0003FE960000 cygntlm-0.dll
0003FE590000 cygsasl2-3.dll
0003F1AF0000 cygunistring-5.dll
0003FF510000 cyggpg-error-0.dll
0003F3750000 cygXdmcp-6.dll
0003F37A0000 cygXau-6.dll
0003F3ED0000 cygICE-6.dll
0003F38E0000 cygSM-6.dll
0003F3320000 cygdatrie-1.dll
0003F24F0000 cyggraphite2-3.dll
0003F2580000 cyggmodule-2.0-0.dll
7FFDDD8A0000 CRYPTBASE.DLL
7FFDDE9D0000 bcryptPrimitives.dll
7FFDDF530000 IMM32.DLL
7FFDD5290000 netapi32.dll
7FFDD5270000 SAMCLI.DLL
7FFDD96A0000 SAMLIB.dll
7FFDDCBD0000 NETUTILS.DLL
7FFDDCD50000 authz.dll
7FFDDCBE0000 iphlpapi.dll
7FFDDCC10000 DNSAPI.dll
7FFDE03C0000 NSI.dll
7FFDD8360000 dhcpcsvc6.DLL
7FFDD8380000 dhcpcsvc.DLL
7FFDDB630000 WINNSI.DLL
7FFDDECA0000 ws2_32.dll
7FFDDD650000 mswsock.dll

View File

@ -1,12 +0,0 @@
<?php
require_once __DIR__.'/vendor/autoload.php';
use baihand\core\BeanFactory;
BeanFactory::init();
/*$myRedis = ClassFactory::getBean(MyRedis::class);
var_dump($myRedis);
$myRedis = ClassFactory::getBean(MyUser::class);
var_dump($myRedis);*/

27
va.php
View File

@ -1,27 +0,0 @@
<?php
require_once __DIR__.'/vendor/autoload.php';
/*use \Doctrine\Common\Annotations\AnnotationReader;
use \Doctrine\Common\Annotations\AnnotationRegistry;
use \App\test\MyRedis;
use \App\annotations\Value;
//获取反射对象 MyRedis
$rc = new ReflectionClass(MyRedis::class);
//获取反射对象的变量
$p = $rc->getProperty("conn_url");
var_dump($p);
$reader = new AnnotationReader();
//获取变量的注释中@Value的name
$anno = $reader->getPropertyAnnotation($p,Value::class);
var_dump($anno);
echo $anno->name;*/
$builder = new DI\ContainerBuilder();
$builder->useAttributes(true);
$container = $builder->build();
$myUser = $container->get(\baihand\test\MyUser2::class);
var_dump($myUser);
var_dump($myUser->getAllUsers());
var_dump($myUser->myredis->getValue());