composer下载#composer create-project laravel/laravel 项目文件夹名称 composer create-project laravel/laravel lar-1 启动项目绑定域名 将域名解析 并 绑定到这个 项目文件夹名称/public ，命令启动php artisan serve查看Laravel版本php artisan --version路由在 routes/web.php 中配置路由//视图路由 //对应文件：/resources/views/XXX.blade.php Route::get('/', function () { return view('welcome'); }); //控制器路由 //Route::get('路由规则地址', [控制器类,方法名称]); //http://dnmp.t1.com/test Route::get('test', [\App\Http\Controllers\Test::class,"index"]); Route::get('welcome', [\App\Http\Controllers\Test::class,"welcome"]); //基本路由 直接输出字符串 //http://dnmp.t1.com/str Route::get("str",function (){ return "this is str"; });控制器在 app/Http/Controllers/ 下创建 Test.php 文件<?php namespace App\Http\Controllers; class Test extends Controller { public function index(){ dump("this is Test/Index"); } public function welcome(){ return view("test/welcome",[ 'name' => '这是一个变量', 'age' => 20, 'a' => '', 'b' => false, ]); } }视图模板与常用语法在 resources/views/ 下创建 test 文件夹，然后创建 welcome.blade.php 文件视图模板文件以 .blade.php 结尾resources/views/test/welcome.blade.php welcome test welcome / view / 变量输出 过滤，默认不解析标签: {{$name}} 不过滤，解析标签: {!! $name !!} 使用函数 md5加密： {{ md5(123456) }} 时间date： {{ date('Y-m-d H:i:s',time()) }} 使用函数 if。 age={{$age}} ,判断年龄阶段 @if($age <= 0) 还没出生 @elseif($age <= 18) 还没成年 @else 成年了 @endif 三元表达式： $b = {{ $b ? '真':'假' }} ??表达式： $age = {{ $age ?? '不存在' }} ｜ ??表达式： $age2 = {{ $age2 ?? '不存在' }} isset 判断变量是否存在 empty 判断是否为空 @isset($a) $a 变量存在 @else $a 变量不存在 @endisset @empty($a) $a 变量为空 @else $a 变量不为空 @endempty
在 Server 程序中如果需要执行很耗时的操作，比如一个聊天服务器发送广播，Web 服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程，导致服务器响应变慢。Swoole 提供了异步任务处理的功能，可以投递一个异步任务到 TaskWorker 进程池中执行，不影响当前请求的处理速度。<?php $http = new Swoole\Http\Server('0.0.0.0', 9501); //设置异步任务的工作进程数量 $http->set([ 'task_worker_num' => 4 ]); ////此回调函数在worker进程中执行 $http->on('Request', function ($request, $response) use($http) { echo "来了！".PHP_EOL; $response->header('Content-Type', 'text/html; charset=utf-8'); $http->task("广播任务"); $http->task("列队任务"); $http->task("邮件任务"); $response->end(' Hello Swoole. #' . rand(1000, 9999) . ' '); }); //处理异步任务(此回调函数在task进程中执行) $http->on('Task', function ($serv, $task_id, $reactor_id, $data) { $sle = rand(1,5); echo "New AsyncTask[id={$task_id}] sleep:{$sle}".PHP_EOL; sleep($sle); //返回任务执行的结果 $serv->finish("{$data} -> OK"); }); //处理异步任务的结果(此回调函数在worker进程中执行) $http->on('Finish', function ($serv, $task_id, $data) { echo "AsyncTask[{$task_id}] Finish: {$data}".PHP_EOL; }); $http->start(); 在终端中运行该php文件 php test.php 在浏览器访问 IP：9501 即可。浏览器显示 Hello Swoole. #8511 终端显示：当 任务数量 大于 异步任务的工作进程数量 时在上面设置的 异步任务的工作进程数量 = 4，当执行的任务数量多于4时，是怎样的呢？$http->on('Request', function ($request, $response) use($http) { echo "来了！".PHP_EOL; $response->header('Content-Type', 'text/html; charset=utf-8'); //6个任务 $http->task("广播任务"); $http->task("列队任务"); $http->task("邮件任务"); $http->task("广播任务2"); $http->task("列队任务2"); $http->task("邮件任务2"); $response->end(' Hello Swoole. #' . rand(1000, 9999) . ' '); });执行结果
文档https://wiki.swoole.com/#/environment安装安装太麻烦了，直接在宝塔里面选择php版本，安装swoole扩展查看当前php命令版本php -v如果不是刚刚安装swoole的版本，就设置一下ln -sf /www/server/php/74/bin/php /usr/bin/php最后查看swoole有没有安装成功php -mTCP协议创建 服务端test1.php、客户端test1.php{tabs}{tabs-pane label="test1.php"}<?php //创建Server对象，监听 127.0.0.1:9501 端口。 $server = new Swoole\Server('127.0.0.1', 9501); //监听连接进入事件。 $server->on('connect', function ($server, $fd) { echo "客户端连接上了.\n"; }); //监听数据接收事件。 $server->on('receive', function ($server, $fd, $reactor_id, $data) { echo "客户端发送过来的消息：{$data} \n"; $server->send($fd, "收到{$fd}的消息:{$data} \n"); }); //监听连接关闭事件。 $server->on('close', function ($server, $fd) { echo "客户端离开.\n"; }); //启动服务器 $server->start();{/tabs-pane}{tabs-pane label="test2.php"}<?php //创建客户端 $client = new Swoole\Client(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } $client->send("hello world\n"); echo $client->recv(); $client->close();{/tabs-pane}{/tabs}创建终端执行命令，运行服务端php test1.php运行结果客户端连接上了. 客户端发送过来的消息：hello world 客户端离开.再创建终端执行命令，运行客户端php test2.php运行结果收到1的消息:hello world UDP协议{tabs}{tabs-pane label="test1.php 服务端"}<?php /** * UDP协议 */ //创建Server对象 $server = new Swoole\Server('127.0.0.1', 9501,SWOOLE_PROCESS, SWOOLE_SOCK_UDP); //监听数据接收事件 $server->on('Packet', function ($server, $data, $clientInfo) { echo $data; echo "\n"; var_dump($clientInfo); echo "\n"; $server->sendto($clientInfo['address'], $clientInfo['port'], "Server：{$data}"); }); //启动服务器 $server->start();{/tabs-pane}{tabs-pane label="test2.php 客户端"}<?php $client = new Swoole\Client(SWOOLE_SOCK_UDP,SWOOLE_SOCK_SYNC); $client->sendto('127.0.0.1', 9501,"hello world\n"); echo $client->recv(); $client->close(); /* $client = new Swoole\Client(SWOOLE_SOCK_UDP); $client->connect('127.0.0.1', 9501); $client->send("hello world\n"); echo $client->recv(); $client->close(); */{/tabs-pane}{/tabs}同样的先启动服务端test1.php,再启动客户端test2.php访问服务端php test1.php php test2.php{message type="success" content="网络协议是计算机网络中进行交换数据而建立的规则、标准、或约定的集合。"/}TCP/UDP协议区别TCP协议：面向连接，发送数据前需要连接提供可靠的服务，通过tcp协议传输数据，不丢失，无差错，不重复且按序到达对系统资源要求较多UDP协议：无连接，发送数据前无需连接udp协议尽力交付，但不保证交付具有较好的实时性，工作效率比tcp高。适用于高速传输和实时性较高的通信和广播通信对系统资源要求较少{dotted startColor="#ff6c6c" endColor="#1989fa"/}Http协议<?php $http = new Swoole\Http\Server('0.0.0.0', 9502); $http->on('Request', function ($request, $response) { echo "来了！！"; $response->header('Content-Type', 'text/html; charset=utf-8'); $response->end(' Hello Swoole. #' . rand(1000, 9999) . ' '); }); $http->start();浏览器访问 IP:端口 websocket{tabs}{tabs-pane label="websocket.php"}<?php //websocket.php //创建WebSocket Server对象， $ws = new Swoole\WebSocket\Server('0.0.0.0', 9501); //监听WebSocket连接打开事件 $ws->on('Open', function ($ws, $request) { $ws->push($request->fd, "hello, {$request->fd},welcome\n"); }); //监听WebSocket消息事件 $ws->on('Message', function ($ws, $frame) { echo "Message: {$frame->data}\n"; $ws->push($frame->fd, "server: {$frame->data}"); }); //监听WebSocket连接关闭事件 $ws->on('Close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; }); $ws->start();{/tabs-pane}{tabs-pane label="index.html"} 恭喜，创建成功！ {/tabs-pane}{/tabs}运行 php websocket.php 打开浏览器，F12并访问 index.html websocket在线测试工具：http://www.websocket-test.com/