热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Swoole整合ThinkPHP3.2系列教程三

使用说明:作为管理员:0.安装swoole扩展swoole项目已收录到PHP官方扩展库,直接使用:-peclinstallswoole1.启动swoole服务在cli模式下

使用说明:

作为管理员:

0.安装swoole扩展
swoole项目已收录到PHP官方扩展库,直接使用:
- pecl install swoole

1.启动swoole服务
在cli模式下,进入Swoole目录,执行以下命令行:
- php swoole.php start

2.柔性重启swoole服务
用于SwooleController框架里的代码更新时,执行以下命令行重新加载代码:
- php swoole.php reload

3.关闭swoole服务
- 直接用kill命令杀死swoole主进程即可(除非特殊情况),一般使用柔性重启就会重启worker进程

4.常用的一些命令:
- lsof -i:9501 查看端口的使用情况
- ps -aux|grep swoole 查看swoole的进程(通常是有一共会创建2 + n + m个进程,其中n为Worker进程数,m为TaskWorker进程数,2为一个Master进程和一个Manager进程,需要修改worker进程和task进程的数量,修改Server.php里的option)


作为开发者:

  • 尽管放心大胆地把你的耗时操作的业务逻辑代码写到Cli模块下的SwooleController里。
  • 当浏览器需要请求耗时任务之前,必须去业务服务器swooleLog表里备案一下,即获取swoole_log表里的ID,携带这个ID去请求swoole服务,否则swoole忽略此次请求,但并不会关闭连接。
  • 我们约定请求耗时操作或者任务的过程按照如下规则进行:
1. 浏览器请求业务服务器,备案此次操作,主要包括耗时操作的function名字以及参数存入业务服务器那边的SwooleLog表(注意重复任务不要多次提交,记得排重)
2. 业务服务器返回浏览器swoole服务的连接地址,以及备案的log_id
3. 浏览器收到业务服务器的返回值以后,创建websocket客户端:
ws = new WebSocket(config.server+'?uid=1');//请求的连接地址使用get请求加上uid
请求swoole服务执行该任务我们约定请求swoole时的数据格式按如下规则统一:
{
cmd:"test" ,//SwooleController里必须有对应的方法名称,
args:{
id: 1,//SwooleLog表里的id
...//其他需要携带的参数

}
}
4. 处理websocket收到消息时的回调
wx.Onmessage=function(e){
var message = JSON.parse(e.data);
}

swoole服务的返回值

code info
202 任务已经提交,请等待服务器计算数据!
404 任务提交失败,请联系管理员进行处理!
200 任务执行完毕!

附上一份JS版的websocket代码案例(暂不支持低版本IE,近期会想办法解决)

function swooleClient(){
var cOnfig= {
'server' : 'ws://192.168.0.166:9501',
};

var ws = {};

$(document).ready(function () {
ws = new WebSocket(config.server+'?uid=1');
listenEvent();
});

function listenEvent() {
/**
* 连接建立时触发
*/

ws.Onopen= function (e) {
//连接成功
console.log("connect webim server success.");
//发送登录信息

ws.send(JSON.stringify({
cmd : 'test',
args : {
id : 3,
name: '哈哈'
}
}));
};

//有消息到来时触发
ws.Onmessage= function (e) {
console.log(e);
var message = JSON.parse(e.data);
$(document.body).html("

"+message.info+"

"
);
};

/**
* 连接关闭事件
*/

ws.Onclose= function (e) {
$(document.body).html("

连接已断开,请刷新页面重新登录。

"
);
};

/**
* 异常事件
*/

ws.Onerror= function (e) {
$(document.body).html("

服务器"+
": 拒绝了连接. 请检查服务器是否启动.

"
);
console.log("onerror: " + e.data);
};
}

推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
    原文转载自「刘悦的技术博客」https:v3u.cna_id_202“表达欲”是人类成长史上的强大“源动力”,恩格斯早就直截了当地指出,处在蒙昧时代即 ... [详细]
  • ThinkPHP6 核心分析:系统服务
    什么是系统服务?系统服务是对于程序要用到的类在使用前先进行类的标识的绑定,以便容器能够对其进行解析(通过服务类的 register 方法),还有就是初始化一些参数、注册路由等(不限 ... [详细]
  • ThinkPHP 分页实现,thinkphp分页实现
    php教程|php手册thinkphpphp教程-php手册ThinkPHP分页实现,thinkphp分页实现开源安卓游戏源码下载,ubuntu时间设置界面,数据库连接池tomca ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 为了让用户体验更好,页面前端往往是通过ajax来进行数据处理;由于浏览器的设计原因每个域名下的连接有 ... [详细]
  • 参考了这篇文章:https:segmentfault.comq1010000000473230后报错误:GettingError“Formsubmissioncanceledbec ... [详细]
  • 极速后台框架 FastAdmin v1.2.0 重磅更新
    不知不觉已经来到了2020年的尾声,2020年注定是不平凡的一年,我们经历了一场百年不遇的瘟疫,这场突如其来的新冠肺炎让无数人失去了朋友,失去了亲人,失去了生命,但这场灾难并没有让我们放弃希望,为了抵抗 ... [详细]
  • 初始化利用的数据设置Thinkphp框架执行的时候,首先会执行入口文件,而后执行app的run()办法,在run办法外面,首先会进行初始化利用,调用initialize()办法。首 ... [详细]
  • GithubGitea安装包pipinstalldjangowebsocket更改我的项目下asgi.py文件importosfromdjango.core.asgiimportg ... [详细]
author-avatar
风一样的男孩668
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有