• tp6 workerman


    一:tp6单应用与多应用。

    目录结构 · ThinkPHP6.0完全开发手册 · 看云

    二:tp6打开错误提示。

    config->app.php->'show_error_msg'

    三:tp6去掉必须带index.php。

     修改public/.htaccess文件为如下:

    1. <IfModule mod_rewrite.c>
    2. Options +FollowSymlinks -Multiviews
    3. RewriteEngine On
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. #RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    7. RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
    8. </IfModule>

    默认是:

    1. <IfModule mod_rewrite.c>
    2. Options +FollowSymlinks -Multiviews
    3. RewriteEngine On
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    7. </IfModule>

    四:tp6多应用。

    tp6安装后默认采用的是 单应用模式部署

    单应用模式的优势是简单灵活,URL地址完全通过路由可控。配合路由分组功能可以实现类似多应用的灵活机制。

    而我个人比较喜欢 多应用模式部署,比如说:对于网站来说,有前台和后台方面的应用。这个时候采用多应用模式部署的话,那在以后的开发和维护起来就更加地方便了。

    快速生成应用

    如果使用了多应用模式,可以快速生成一个应用,例如生成demo应用的指令如下:

    php think build demo
    

    你会发现:上面的命令好像执行不了。是因为你没有安装多应用模式扩展think-multi-app

    安装think-multi-app扩展:

    composer require topthink/think-multi-app
    

    注意:执行上面的命令时,一定要在你的应用根目录下执行。也就是有一个think的文件的目录下执行。

    安装成功之后,再次执行 php think build demo

    这次执行成功后,你会发现你的应用根目录里的app文件夹里多了一个demo的文件夹。

    上面的生成的应用是 demo,比如你想生成后台的应用admin,前台的应用home,api方面的应用api。主要还是看个人是什么需求再去生成相应的应用。

    查看生成的应用目录

    五:tp6开启强制路由。

    1:不开启强制路由可以直接访问存在的方法。

    如下图:可127.0.0.1/index/index/index 直接访问。

    2:开启强制路由必须在路由中定义,否则报错。

     

    3:定义路由方式。

    1):在应用中新建route文件夹。新建admin.php。任意 名字都可以。

    2):

    1. Route::get('index', 'admin/index/index');
    2. //Route::get('index', 'index/index'); 省略admin也可以。

    请求地址为 ,需加上应用名admin。

    六:View显示。

    需要使用,安装。

    composer require topthink/think-view

    安装路径:

    不安装会报错。

    还需要引入View类。

    1. <?php
    2. declare (strict_types = 1);//declare(strict_type=1);是php7引入的 严格类型检查模式的指定语法
    3. namespace app\admin\controller;
    4. use think\facade\View;
    5. class Index
    6. {
    7. public function index()
    8. {
    9. //return '您好!这是一个[admin]示例应用';
    10. // 不带任何参数 自动定位当前操作的模板文件
    11. //return View::fetch();//不指定名字,则默认用index
    12. return View::fetch('index2');//指定名字
    13. }
    14. }

    七:静态资源加载。

    1. //静态资源引用,后加入
    2. 'tpl_replace_string' => [
    3. '__STATIC__' => '/static',
    4. '__JS__' => '/static/js',
    5. '__IMG__' => '/static/images',
    6. '__FONT__' => '/static/font'
    7. ]

    使用:

    1. <script src="__STATIC__/js/jquery-3.6.2.min.js">script>
    2. <script src="__STATIC__/bootstrap-5.2.3-dist/js/bootstrap.js">script>
    3. <script src="__STATIC__/js/toastr.js">script>
    4. <script src="__STATIC__/layer/layer.js">script>

    八:数据库连接。

    九:tp6 workerman

    1):直接使用官方文档,安装tp6,workerman。

    2):workerman安装完毕后,在vendor文件夹下。

    3):workerman更简单。swoole更高效。workerman是php写的。swoole是c写的。

    1:安装workerman

    通过 composer 安装

    composer require topthink/think-worker

    2:workerman测试

    服务端测试代码:

    1. namespace app\http;
    2. use think\worker\Server;
    3. use think\facade\Session;
    4. class Worker extends Server{
    5. protected $socket = 'websocket://0.0.0.0:2345';
    6. public function onMessage($connection, $data)
    7. {
    8. echo "onMessage\n";
    9. $connection->send("收到啦!!!!!");
    10. }
    11. /**
    12. * 当连接建立时触发的回调函数
    13. * @param $connection
    14. */
    15. public function onConnect($connection)
    16. {
    17. echo "onConnect\n";
    18. $connection->send("连接成功");
    19. }
    20. /**
    21. * 当连接断开时触发的回调函数
    22. * @param $connection
    23. */
    24. public function onClose($connection)
    25. {
    26. echo "close\n";
    27. }
    28. /**
    29. * 当客户端的连接上发生错误时触发
    30. * @param $connection
    31. * @param $code
    32. * @param $msg
    33. */
    34. public function onError($connection, $code, $msg)
    35. {
    36. echo "error $code $msg\n";
    37. }
    38. /**
    39. * 每个进程启动
    40. * @param $worker
    41. */
    42. public function onWorkerStart($worker)
    43. {
    44. echo "onWorkerStart\n";
    45. }
    46. }

    客户端测试代码:
     

    1. <html>
    2. <head>
    3. <meta charset="utf-8" />
    4. <title>网页版群聊</title>
    5. </head>
    6. <body>
    7. <script>
    8. ws = new WebSocket("ws://192.168.0.145:2345");
    9. ws.onopen = function() {
    10. console.log("连接成功");
    11. ws.send('tom');
    12. console.log("给服务端发送一个字符串:tom");
    13. };
    14. ws.onmessage = function(e) {
    15. console.log("收到服务端的消息:" + e.data);
    16. };
    17. </script>
    18. </body>
    19. </html>

    测试发现,关闭浏览器会触发close事件。

    但直接断网,不会触发close事件。

    workerman和

    参考文档:

    序言 · ThinkPHP6.0完全开发手册 · 看云 (kancloud.cn)

    ThinkPHP6多应用模式配置经验总结_从删库到跑路养成记的博客-CSDN博客_thinkphp6 多应用

    ThinkPHP6之多应用模式 - 走看看

    分析TP6的多应用与TP5的区别 – 智云一二三科技

    tp6+Workerman_北寻的博客-CSDN博客_tp6 workerman

    使用TP6+Workerman实现私聊(类似QQ)、实时聊天(2、搭建workerman)_筱宇***的博客-CSDN博客_tp6 聊天

    Thinkphp6 WorkerMan中如何向某个特定客户端发送数据-趙哥博客

    Thinkphp 使用Workerman 聊天室_杰姆小生的博客-CSDN博客_thinkphp6workerman聊天

    php在线客服:TP6+workerman实现_Ben Taotao的博客-CSDN博客_tp6 workerman

  • 相关阅读:
    安卓app客户端测试---Drozer使用
    Java并发编程第10讲——CAS相关知识点详解
    实现简易minishell
    Spring源码中的命名风格总结
    归并排序算法代码
    mediasoup-client的H5在ios的微信内置浏览器上无法视频通话,报错device not supported
    Go/Golang语言学习实践[回顾]教程03--Go语言的编译与运行的命令行
    图论·搜索最短路径
    SpringBoot实战系列之图形验证码开发并池化Redis6存储
    【wiki知识库】05.分类管理实现--前端Vue模块
  • 原文地址:https://blog.csdn.net/wenhuadream/article/details/128174507