tp5使用workerman实现异步任务
优采云 发布时间: 2020-08-12 05:00问题描述:
采集数据时过程太慢,导致难以继续进行其他任务,,避免主业务被长时间阻塞,故而将其递交给异步任务,当任务完成通知客户端即可
流程
前端业务:
由于本系统采用iframe结构,为防止点击其他页面业务中断,所以业务在父页面执行,
1.用户在子页面点击采集按钮调用父级方式
function to_collect(ids) {
window.parent.startCollect(ids);
}
2.父级页面进行socket链接,当收到服务器处理完任务消息时关掉socket并通知用户结果
function startCollect(ids)
{
var wsServer = 'ws://127.0.0.1:5432';
var websocket = new WebSocket(wsServer);
var inter_val = 0;
websocket.onopen = function (evt) {
console.log("Connected to WebSocket server.");
var data = {ids:ids};
data = JSON.stringify(data);
websocket.send(data);
//设置心跳,避免服务器断开
inter_val = setInterval(function () {
websocket.send('hello');
}, 50000)
};
websocket.onclose = function (evt) {
console.log("Disconnected");
};
websocket.onmessage = function (evt) {
console.log('Retrieved data from server: ' + evt.data);
if (isJson(evt.data)) {
var res = JSON.parse(evt.data);
if(res.code == 0){
alert("采集条数:"+res.msg)
websocket.close();
clearInterval(inter_val);//关闭定时器
}
}
};
websocket.onerror = function (evt, e) {
console.log('Error occured: ' + evt.data);
};
}
/**
* 判断是否json
* @param $string
* @returns {boolean}
*/
function isJson($string)
{
try {
if(typeof JSON.parse($string) == 'object')
return true;
return false;
} catch (e) {
console.log(e);
return false;
}
}
服务端
1. 收到后端发来的数据,调用model进行业务处理,然后通知客户端
<p>