TP6+Swoole配置使用
由于当前使用php7.2版本,默认使用composer安装swoole的时候会自动安装3.x版本。
服务器的扩展安装这里不介绍,另外windows不支持swoole,如果需要,可通过虚拟机或者docker实现
安装swoole1composer require topthink/think-swoole
创建事件订阅类1php think make:subscribe WebSocketEvent
将以下代码覆盖到WebSocketEvent.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152<?phpdeclare (strict_types = 1);namespace app\subscribe;use app\Request;use Swoole\Server;use Swoole\WebSocket\Frame;use think\cache\driver\Redis;use think\Container;class ...
ThinkPHP5 使用swoole 网页版实时聊天
目前官方已经开放了ThinkPHP5.1版本的swoole:https://github.com/top-think/think-swoole
安装服务器必须开启swoole扩展,如使用宝塔,则在对应的php版本—设置—安装扩展—选择swoole4安装。
安装完之后用命令执行php -m,看到swoole即代表安装完成。
在swoole扩展安装后,tp5的项目根目录下执行composer命令安装think-swoole:1composer require topthink/think-swoole
注意:对应的端口要放行,这里使用的端口是9501
服务端启动 swoole1php think swoole:server
相关数据表如果有登录注册,无则忽略
用户表(简约版)1234567891011CREATE TABLE `dy_user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '账号', `password` varchar(64) N ...
TP6+消息队列
PHP消息队列1、消息队列概念从本质上说消息对列就是一个队列结构的中间件,也就是说消息放入这个中间件之后就可以直接返回,并不需要系统立即处理,而另外会有一个程序读取这些数据,并按顺序进行逐次处理。
2、核心结构业务系统 --(入队)--> 消息队列 --(出队)--> 队列处理系统
3、应用场景1、数据冗余:比如订单系统,后续需要严格的进行数据转换和记录,消息队列可以把这些数据持久化的存储在队列中,然后有订单,后续处理程序进行获取,后续处理完之后在把这条记录进行删除来保证每一条记录都能够处理完成。2、系统解耦:使用消息系统之后,入队系统和出队系统是分开的,也就说其中一个崩溃之后不会影响另外一个的正常运行。3、异步通信:消息本身使用入队之后可以直接返回。4、扩展性:例如订单队列,不仅可以处理订单,还可以给其他业务使用。5、排序保证:有些场景需要按照产品的顺序进行处理比如单进单出从而保证数据按照一定的顺序处理,使用消息队列是可以的。6、流量削峰:就是秒杀和抢购的时候,会出现明显的流量剧增,对服务器的压力非常大。7、消息通讯:消息队列一般都内置了高效的通信机制,因此也可以用在纯的 ...
腾讯云直播配置
背景最近项目涉及到直播以及即时通信IM的业务场景,即时通信这个我们可以利用gatewayworker自行开发;但是直播需要考虑到并发等诸多因素,于是选择第三方服务,比如腾讯、阿里等,这里就以腾讯云直播【标准直播(LVB)】为例。
前期准备腾讯云账号、备案域名这就不说了。其次,首次接触直播,也不清楚直播的流程,也不清楚选择哪个服务,所有做起来就稍微比较迷茫。腾讯云入口
最笨的办法就是把云直播的产品简历浏览一遍,最好的办法就是问问周围的大佬。(PS:腾讯云的客服也超级给力)
自行根据产品需求不同进行选择吧。
开始使用云直播服务,至少需要2个域名,一个作为推流域名,一个作为播放域名,推流和播放不能使用相同的域名,这个自行在域名管理上绑定CNAME。(域名必须要备案)
注意:添加的域名,一定要按照格式: www.test.com,可以使用二级域名。比如,推流域名;push.test.com;播放域名:play.test.com; 这个域名就是你域名解析列表中的真实域名
其中系统默认分配的推流域名,可以当作测试使用,也可以当作正式推流域名使用。当然也可以自定义推流域名,默认分配的域名不需 ...
wps专业版激活终身授权
WPS专业版激活终身授权WPS专业版下载地址
右键进入安装位置
找到acm.dll,将其删除。
然后打开wps其中一个软件会弹出有提示输入序列号
输入以下其中一组序列号即可激活
123序列号:694BF-YUDBG-EAR69-BPRGB-ATQXH备用:R8R8P-MTT6F-KLRPM-J7CAB-PJM8C
宝塔Linux面板-安装golang环境
获取go安装包官网:https://golang.org/dl/ (需要梯子)国内安装包下载路径:https://studygolang.com/dl
下载go并解压1cd /www/server && wget https://dl.google.com/go/go1.16.5.linux-amd64.tar.gz
1tar -xzvf go1.16.5.linux-amd64.tar.gz
添加环境变量使用 打开/etc/profile 文件
1vi /etc/profile 或者 vim /etc/profile
在最底部添加
1234567export GOROOT=/www/server/goexport GOBIN=$GOROOT/binexport GOPKG=$GOROOT/pkg/tool/linux_amd64export GOARCH=amd64export GOOS=linuxexport GOPATH=/www/wwwroot/Golangexport PATH=$PATH:$GOBIN:$GOPKG:$GOPATH/bin
执行命令使环境变 ...
文件排他锁解决小型并发
众所周知,并发容易造成数据重复处理或者商品超卖等等情况; 如果使用数据库排他锁消耗的资源相对较高,那么这时可考虑使用文件排他锁。
阻塞(等待)模式:
并发时,当有第二个用户请求时,会等待第一个用户请求完成、释放锁,获得文件锁之后,程序才会继续运行下去。
123456789<?php $fp = fopen('lock.txt', 'w'); if(flock($fp, LOCK_EX)){ //文件独占锁,阻塞 //TODO 业务代码... flock($fp, LOCK_UN); //释放锁 } fclose($fp);?>
非阻塞模式:
并发时,当第一个用户请求拿得文件锁之后。后面请求的用户直接返回系统繁忙,请稍后再试。
1234567891011<?php $fp = fopen('lock.txt', 'w'); if(flock($fp, LOCK_EX|LOCK_NB)) ...
Navicat备份数据库出现 show_compatibility_56 相关错误
数据库备份错误问题备份数据库出现:3167 - The 'INFORMATION_SCHEMA.GLOBAL_STATUS' feature is disabled; see the documentation for 'show_compatibility_56' 的错误,或者 show_compatibility_56 相关错误
是因为从 mysql5.7.6 开始 information_schema.global_status 已经开始被舍弃,为了兼容性,此时需要打开 show_compatibility_56
解决方法执行命令以下命令:
查看show_compatibility_56视图状态1show variables like '%show_compatibility_56%';
修改show_compatibility_56为on1set global show_compatibility_56=on;
解决MySQL5.7.5及以上group by报错的问题
MySQL5.7.5及以上 group by 报错问题MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY (仅限于) SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)
大体意思:除开主键id作为 分组条件,其他都不行。当查找返回是聚合函数时 其他列作为分组条件可以。
解决方法一
查询mysql 相关mode
select @@global.sql_mode;
查询结果
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重设 ...
PHP:curl error 60:SSL certificate unable to get local issuer certificate
接口请求报错:PHP:cURL error 60: SSL certificate unable to get local issuer certificate 是由于没有在php.ini配置curl.cainfo
解决方法如下:
下载cacert.pem
cacert.pem下载链接
将文件放置对应PHP版本目录中
配置php.ini
打开对应PHP版本的php.ini,搜索curl.cainfo,将前面的 ; 删掉,在后面加上cacert.pem所在的绝对路径。
例子:1234[curl]; A default value for the CURLOPT_CAINFO option. This is required to be an; absolute path.curl.cainfo = D:\phpstudy_pro\Extensions\php\php7.2.9nts\cacert.pem