swoole学习--登录模块
使用swoole+thinkphp6.0+redis 结合开发的登录模块,做完之后有几点感悟:
1.不要相信任务数据,包括请求的外部接口,特别是超时者部分,尽可能的交给task完成。
2.原来可以在入口文件哪里使用超全局变量声明已经实例化的server服务对象,然后就其他文件使用了。
3.异步任务(协程)里面不能再异步(开启协程任务),只能是同步(task任务下,redis只能使用同步的模式,使用异步的模式会出错!)。
4.在使用task任务下,不能使用thinkphp6.0里面的门面(Facade
),报错原因是因为找不到这个类(因为没有加载到这里)。
5.所有耗时的任务叫交给task完成。
6.使用同步redis下的单例模式,指的是同一个请求下只连接一次,后面在这个请求里面不断重复的都是这个实例,如:
<?php
namespace app\common\controller;
use think\facade\Config;
use app\common\controller\Redis; //redis单例模式
class Predis
{
public $redis;
/**
* 定义单例模式的变量
*/
private static $_instance = null; public function __construct()
{
$this -> redis = new \Redis();
//$result = $this -> redis->connect(Config::get('redis.host'), Config::get('redis.port'), Config::get('redis.timeOut'));
$result = $this -> redis->connect('127.0.0.1', , ); if($result === false)
{
throw new \Exception('redis connect error');
}
} /**
* 1、单例类只能有一个实例。
* 2、单例类必须自己创建自己的唯一实例。
* 3、单例类必须给所有其他对象提供这一实例。
*/
public static function getInstance()
{
if(empty(self::$_instance))
{
self::$_instance = new self();
} return self::$_instance;
} /**
* 存储数据
*/
public function set($key, $value, $time=)
{
if(empty($key))
{
return "";
} if(is_array($value))
{
$value = json_encode($value);
} if(!$time)
{
return $this -> redis -> set($key, $value);
} return $this -> redis -> setex($key, $time, $value);
} /**
*获取数据
*/
public function get($key)
{
if(empty($key))
{
return "";
} $res = $this -> redis -> get($key);
return $res; } }
使用:
Predis::getInstance()->set(Redis::smsKey($data['phone']), $data['code']);
7.在整理task功能的时候,有注意到一个有趣的事情:就是通过一个变量值来调用这个对象的方法,如:
$obj = new app\common\task\Task();
$method = $data['method'];
if(empty($method))
{
return "method for null";
}
$flag = $obj -> $method($data['data']);
8.能面向对象的就尽量面向对象,尽可能避免面向过程,主要是对以后维护不好维护。
9.如果需要task来处理事情的话,记得在set的时候写明task是多少,不然无法开启task任务,如:
$this->http->set(
[
'enable_static_handler' => true,
'document_root' => '/www/wwwroot/tp6/public/index',
'worker_num' => ,//worker的数量
'task_worker_num' => ,//task的数量
]
);
10.server里面的事件也有对应的方法,事件!=方法,你要先注册这个事件,才能使用这个方法!具体请参考server的task方法的使用!
11.使用ob_end_clean()方法必须要有输出才行,不然会报错!
swoole学习--登录模块的更多相关文章
- 登录模块的进化史,带大家回顾java学习历程(二)
接着前面的登录模块的进化史,带大家回顾java学习历程(一) 继续往下面讲 前面我们去实现登录功能,都是想着要完成这个功能,直接在处理实际业务的类中去开始写具体的代码一步步实现,也就是面向过程的编程. ...
- iPad开发--QQ空间布局,登录模块
一.登录模块 登录逻辑 - (IBAction)loginClick:(UIButton *)sender { self.view.userInteractionEnabled = NO; [self ...
- Web应用程序系统的多用户权限控制设计及实现-登录模块【4】
通过前三个模块的介绍,把web权限系统开发所需要的基本类,Css文件,EasyUI框架等准备好后,就可以着手开始系统的编码了. 登陆模块是权限处理系统的关键,根据输入用户的的信息,可自动从数据库中加载 ...
- iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮
一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置pla ...
- 如何设计App登录模块?
1.熟悉目前常见的手机APP登陆方式 ① 账号登陆(手机.邮箱) ② 第三方登陆(微信,QQ,微博) ③ 一键快捷登录(工具类,如不记单词) ④ 游客登陆(bbs) ⑤ demo测试登陆(如友盟等) ...
- IDE开发<LER-Studio>(2)::登录模块
软件中写登录模块是为了防止软件的恶意传播,内测阶段可以忽略登录. 以下为登录模块主要源代码: void CLoginDlg::OnBnClickedBtnLogin() { // TODO: Add ...
- 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)
遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...
- 基于localStorge开发登录模块的记住密码与自动登录
前沿||我是乐于分享,善于交流的鸟窝 先做写一篇关于登录模块中记住密码与自动登录的模块.鸟窝微信:jkxx123321 关于这个模块功能模块的由来,这是鸟大大的处女秀,为什么这么说呢?一天在群里,一个 ...
- Python学习--Selenium模块
1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台
随机推荐
- CVE-2020-2551复现过程
项目地址 cnsimo/CVE-2020-2551 CVE-2020-2551 weblogic iiop 反序列化漏洞 该项目的搭建脚本在10.3.6版本经过测试,12版本未测试. 环境 kali+ ...
- 谈谈surging 与多语言混合微服务构思
1.前言 微服务架构已成为目前互联网架构的趋势,关于微服务的讨论,几乎是各大技术论坛.技术大会的热门话题.而Surging是高性能的模块化微服务引擎,是大家首选微服务引擎架构之一,而针对于框架有个突出 ...
- 《快速认识 Three.js 》
此文仅作备份之用,为了更好的阅读体验,建议访问原文链接:<Three.js - 走进3D的奇妙世界.> ,感谢原作者的好文.
- git设置
1:注册码云2:点击个人主页创建私有项目3:下载git4:点击码云 头像 选择下方的设置-->点击左侧的SSH公钥-->怎样生成公钥(linux操作) window系统可以右击选择 git ...
- 1098 Insertion or Heap Sort (25分)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- mysql--使用left join条件查询时加where条件的问题
场景:为一个活动添加指导文件,每一个活动会对应多种指导文件类型,进入每一个活动的设置指导文件页面后所呈现的指导文件类型相同,查询时,使用指导文件类型表LEFT JOIN指导文件表,要求指导文件类型全部 ...
- Hadoop安装教程_单机(含Java、ssh安装配置)
文章更新于:2020-3-24 按照惯例,需要的文件附上链接放在文首 文件名:Java SE Development Kit 8u241 文件大小:72 MB+ 下载链接:https://www.or ...
- 家庭记账本app进度之复选框以及相应滚动条的应用
这次主要是对于android中复选框的相应的操作.以及其中可能应用到的滚动条的相关应用.每一个复选框按钮都要有一个checkBox与之相对应. 推荐使用XML配置,基本语法如下:<CheckBo ...
- 手动搭建I/O网络通信框架3:NIO编程模型,升级改造聊天室
第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 第二章:手动搭建I/O网络通信框架2:BIO编程模型实现群聊 在第二章中用BIO编程模型,简单的实现了一 ...
- Java第三十三天,IO操作(续集),字符转换流
计算机都是以二进制码格式存储文件的,但是在读写文件的过程中,每个应用程序都有自己的编码格式.FileWrite和FileRead类是通过查询系统默认码表进行读写的,因此在自己的系统上能够实现编码的智能 ...