PHP code example of api-swoole / skeleton
1. Go to this page and download the library: Download api-swoole/skeleton library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
api-swoole / skeleton example snippets
php apiswoole.php
namespace App\Example;
use Sapi\Api;
class Hello extends Api
{
public function index()
{
return [
'code' => 200,
'data' => [
'name' => 'api-swoole',
'version' => DI()->config->get('conf.version'),
],
];
}
}
php apiswoole.php
server {
listen 80;
server_name swoole.test;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9501;
}
}
./config/
├── conf.php #http、tcp、udp、websocket等配置
├── db.php #数据库配置
└── events.php #定制特定事件注册监听
return [
'ws' => [
'host' => '0.0.0.0',//监听地址
'port' => 9501,//监听端口
'events' => [
['open', \Sapi\Events::class, 'onOpen'],
['message', \Sapi\Events::class, 'onMessage'],
['close', \Sapi\Events::class, 'onClose'],
['request', \Sapi\Events::class, 'onRequest'],//HTTP服务器回调
['Task', \Sapi\Events::class, 'onTask'],
['Finish', \Sapi\Events::class, 'onFinish'],
['workerStart', \Sapi\Events::class, 'onWorkerStart'],
['start', \Sapi\Events::class, 'onStart'],
],//回调函数
'settings' => [
'daemonize' => false,//设置 daemonize => true 时,程序将转入后台作为守护进程运行。长时间运行的服务器端程序必须启用此项。如果不启用守护进程,当 ssh 终端退出后,程序将被终止运行
'worker_num' => swoole_cpu_num(),
'log_file' => 'storage/swoole',
'log_rotation' => SWOOLE_LOG_ROTATION_DAILY,
'log_date_format' => '%Y-%m-%d %H:%M:%S',
'log_level' => SWOOLE_LOG_DEBUG,
'task_worker_num' => 10,
],
],
];
namespace App\Controller;
use Sapi\Api;
class Hello extends Api
{
public function index()
{
return [
'code' => 200,
'data' => 'hello world'
];
}
}
namespace App\Example;
use Sapi\Api;
class WebsocketHello extends Api
{
public function hello(\Swoole\WebSocket\Server $server, array $msg): array
{
return [
'err' => 200,
'data' => [
'name' => 'api-swoole',
'version' => DI()->config->get('conf.version'),
]
];
}
}
namespace App\Example;
class Auth extends HttpBase
{
public function rule()
{
return [
'login' => [
'username' => ['name' => 'username', ' "msg" => "login",
"data" => [
'username' => $request->post['username']
]
];
}
}
namespace App\Example;
use Sapi\Api;
class WsBase extends Api
{
public function userWsCheck(\Swoole\WebSocket\Frame $frame): string
{
$res = json_decode($frame->data, true);
if (!isset($res['data']["x-token"]) || $res['data']["x-token"] != "123123") {
return "token expired";
}
return "";
}
}
return [
'redis' => [
'host' => '192.168.0.105',//Redis服务器地址
'port' => 6379,//指定 Redis 监听端口
'auth' => '',//登录密码
'db_index' => 2,//指定数据库
'time_out' => 1,//
'size' => 64,//连接池数量
],
];
namespace App\Controller;
use App\Ext\Redis;
class RedisDemo
{
public function setData(\Swoole\Http\Request $request, \Swoole\Http\Response $response)
{
$redis = new \Simps\DB\BaseRedis();
$res = $redis->set('我是key', '我是value');
return [
"code" => 200,
"msg" => "hello World!",
"data" => [
'res' => $res,
'key' => $request->get['key'],
'val' => $request->get['val'],
],
];
}
}
return [
'mysql' => [
'host' => '',//连接地址
'port' => ,//连接端口
'database' => '',//数据库名称
'username' => 'root',//用户
'password' => '',//密码
'charset' => 'utf8',//字符集
'unixSocket' => null,//
'options' => [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
],
'size' => 64 // 连接池数量
],
];
$this->beginTransaction();
$this->insert("user", [
"name" => "luffy",
"gender" => "1"
]);
$this->delete("user", [
"id" => 2
]);
if ($this->has("user", ["id" => 23]))
{
$this->rollBack();
} else {
$this->commit();
}
namespace App\Controller;
class MysqlDemo
{
public function getOne(\Swoole\Http\Request $request, \Swoole\Http\Response $response)
{
$uid = $request->post['uid'];
$database = new \Simps\DB\BaseModel();
$res = $database->select("user_info", [
"uid",
"nick",
], [
"uid" => $uid
]);
return [
"code" => 200,
"msg" => "MysqlDemo getOne",
"data" => [
'res' => $res,
'uid' => $uid,
],
];
}
public function save(\Swoole\Http\Request $request, \Swoole\Http\Response $response)
{
$username = $request->post['username'];
$database = new \Simps\DB\BaseModel();
$last_user_id = $database->insert("user_info", [
"uid" => time(),
"nick" => $username,
]);
return [
"code" => 200,
"msg" => "MysqlDemo save",
"data" => [
'last_user_id' => $last_user_id,
'username' => $username,
],
];
}
public function del(\Swoole\Http\Request $request, \Swoole\Http\Response $response)
{
$uid = $request->post['uid'];
$database = new \Simps\DB\BaseModel();
$res = $database->delete("user_info", [
"uid" => $uid
]);
return [
"code" => 200,
"msg" => "MysqlDemo del",
"data" => [
'res' => $res,
'uid' => $uid,
],
];
}
public function update(\Swoole\Http\Request $request, \Swoole\Http\Response $response)
{
$uid = $request->post['uid'];
$username = $request->post['username'];
$database = new \Simps\DB\BaseModel();
$res = $database->update("user_info", [
"nick" => $username
], [
"uid" => $uid
]);
return [
"code" => 200,
"msg" => "MysqlDemo update",
"data" => [
'res' => $res,
'uid' => $uid,
'username' => $username,
],
];
}
}
namespace App\Controller;
class Process
{
//添加用户自定义的工作进程
public function addProcess($server)
{
return new \Swoole\Process(function ($process) use ($server) {
while (true) {
\Co::sleep(1);
echo "Hello, api-swoole!\r\n";
}
}, false, 2, 1);
}
}