Swoole整合ThinkPHP3.2系列教程三_一个不靠谱的程序员-CSDN博客

来源: Swoole整合ThinkPHP3.2系列教程三_一个不靠谱的程序员-CSDN博客

使用说明:
作为管理员:
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);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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(“<h1 style=’text-align: center’>”+message.info+”</h1>”);
};

/**
* 连接关闭事件
*/
ws.onclose = function (e) {
$(document.body).html(“<h1 style=’text-align: center’>连接已断开,请刷新页面重新登录。</h1>”);
};

/**
* 异常事件
*/
ws.onerror = function (e) {
$(document.body).html(“<h1 style=’text-align: center’>服务器”+
“: 拒绝了连接. 请检查服务器是否启动. </h1>”);
console.log(“onerror: ” + e.data);
};
}
————————————————
版权声明:本文为CSDN博主「一个不靠谱的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013705066/article/details/77679670

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏