GatewayWorker 如何同時做聊天和系統(tǒng)消息推送
查了文檔和資料發(fā)現(xiàn)大部分都是 GatewayWorker做聊天 web-msg-sender做推送,但是web-msg-sender使用的是phpSocket.io 看了論壇里面說到phpSocket.io能做的GatewayWorker也能做,可是搗騰了3天也沒搞定。
GatewayWorker做了聊天正常聊天 在多寫一個分支用來推送聊天就失效了!也就是說GatewayWorker怎么做系統(tǒng)推送(不使用phpSocket.io的話)。謝謝!
我是這樣做的
1、在Ubuntu上部署了GatewayWorker 局域網(wǎng)IP為
配置 $gateway->lanIp = '192.168.0.110';因為要使用GatewayClient在本地192.168.1.107開發(fā)環(huán)境開發(fā)(基于TP3.2)
----------------------- WORKERMAN -----------------------------
Workerman version:3.3.6 PHP version:7.0.7
------------------------ WORKERS -------------------------------
user worker listen processes status
root YourAppBusinessWorker none 4
root YourAppGateway websocket://0.0.0.0:8282 4
root Register text://0.0.0.0:1238 1
----------------------------------------------------------------
Press Ctrl-C to quit. Start success.
2、在本地window上使用GatewayClient做聊天和系統(tǒng)推送
//TP代碼片段 文件:Chat/test.php
switch($message) {
case 'sendMessage':
//這里發(fā)送聊天消息內(nèi)容
break;
case 'notice':
//發(fā)送系統(tǒng)消息 {‘type’:'notice','data':'這一一個系統(tǒng)消息'}
Gateway::sendToAll($data);
break;
default:
echo "unknown message $data";
}
//監(jiān)聽收到的消息
socket.onmessage = function(e){
var data = eval("("+e.data+")");
console.info(data);
switch(data){
// 服務(wù)端ping客戶端 心跳
case 'ping':
socket.send('{"type":"ping"}');
break;
// 登錄 更新用戶列表
case 'init':
$.post('{:U("Chat/bind")}',{client_id:data.client_id},function(data){
console.log(data);
});
break;
break;
// 檢測聊天數(shù)據(jù)
case 'chatMessage':
console.log(data.data);
break;
//通知
case 'notice':
$('#content').append(data.data+'<br>');
console.log(data);
break;
default:
console.error(data);
}//switch
};// websocket onmessage
//l聊天
$('#sendMessage').click(function() {
var txt = $('#txt').val();
var login_data = '{"type":"sendMessage","data":"'+txt+'"}';
console.info(login_data);
$.post('{:U("Chat/test")}',{data:login_data},function(data){
console.log(data);
});
});
//推送系統(tǒng)消息
$('#notice').click(function() {
var login_data = '{"type":"notice","data":"推送的系統(tǒng)消息"}';
$.post('{:U("Chat/test")}',{data:login_data},function(data){
console.log(data);
});
});