$worker = new Worker('tcp://0.0.0.0:9090'); //http協(xié)議
//啟動(dòng)1個(gè)進(jìn)程對(duì)外提供服務(wù)
$worker -> count = 1;
Worker::$daemonize = true;
Worker::$stdoutFile = '/tmp/stdout.log';
//增加一個(gè)屬性
$worker -> uidConnections = array();
$worker -> onWorkerStart = function($worker){
$worker -> onConnect = function($connection){
global $worker;
$ip = $connection -> getRemoteIp();
$id = $connection -> id;
$worker -> uidConnections = $connection;
echo "連接成功";
$GLOBALS = Timer::add(0.001,array('DealData','dealSream'),array($id, $connection),true);//隔1ms處理一次stream
};
$worker -> onMessage = function($connection,$datas){
//#考慮校驗(yàn)
$id = $connection -> id;
if(!isset($GLOBALS)){
$GLOBALS = $datas;
}else{
$GLOBALS .= $datas;//接收流到緩沖區(qū)
}
};
比如這段程序,
1.如果我的定時(shí)器那邊還沒(méi)執(zhí)行完的情況下,onmessage區(qū)間是否還能正常接收存儲(chǔ)數(shù)據(jù)?
2.如果我設(shè)置進(jìn)程數(shù)是2或者更多,是系統(tǒng)自動(dòng)選擇進(jìn)行執(zhí)行,還是需要手動(dòng)規(guī)定某個(gè)進(jìn)程執(zhí)行哪些業(yè)務(wù),比如if($worker -> id ==0){第一個(gè)進(jìn)程}else{其他進(jìn)程業(yè)務(wù)}?
3.‘1’問(wèn)題中定時(shí)器會(huì)影響收數(shù)據(jù),那我能不能開(kāi)兩個(gè)進(jìn)程,一個(gè)進(jìn)程專(zhuān)門(mén)運(yùn)行定時(shí)器處理數(shù)據(jù),另一個(gè)進(jìn)程做目前的其他業(yè)務(wù)。改成這樣的代碼
$worker = new Worker('tcp://0.0.0.0:9090'); //http協(xié)議
//啟動(dòng)1個(gè)進(jìn)程對(duì)外提供服務(wù)
$worker -> count = 2;
Worker::$daemonize = true;
Worker::$stdoutFile = '/tmp/stdout.log';
//增加一個(gè)屬性
$worker -> uidConnections = array();
$worker -> onWorkerStart = function($worker){if($worker -> id == 0){$GLOBALS = Timer::add(0.001,array('DealData','dealSream'),array($id, $connection),true);//隔1ms處理一次stream}else{
$worker -> onConnect = function($connection){
global $worker;
$ip = $connection -> getRemoteIp();
$id = $connection -> id;
$worker -> uidConnections = $connection;
echo "連接成功";
};
$worker -> onMessage = function($connection,$datas){
//#考慮校驗(yàn)
$id = $connection -> id;
if(!isset($GLOBALS)){
$GLOBALS = $datas;
}else{
$GLOBALS .= $datas;//接收流到緩沖區(qū)
}
};
當(dāng)前進(jìn)程的定時(shí)器沒(méi)執(zhí)行完,當(dāng)前進(jìn)程的onMessage會(huì)排隊(duì)等待,不會(huì)被觸發(fā)。
你可以單獨(dú)new 一個(gè)Worker處理定時(shí)任務(wù),比如
?
$task = new Worker();
$task->onWorkerStart = function () {
? ? Timer::add(...
};
?
$worker = new Worker('tcp://0.0.0.0:9090');
$worker...
如果onMessage一直排隊(duì)等待著,而客戶(hù)端還源源不斷的發(fā)送數(shù)據(jù)流會(huì)有什么現(xiàn)象?老數(shù)據(jù)會(huì)被新數(shù)據(jù)替換嗎,會(huì)有哪個(gè)回調(diào)函數(shù)被觸發(fā)嗎
同一個(gè)連接源源不斷發(fā)送數(shù)據(jù),服務(wù)端無(wú)法及時(shí)處理,這些數(shù)據(jù)會(huì)堆積在客戶(hù)端socket緩沖區(qū),緩沖區(qū)滿(mǎn)后客戶(hù)端無(wú)法再發(fā)送數(shù)據(jù)。不會(huì)有老數(shù)據(jù)替換新數(shù)據(jù)的情況
@1:發(fā)現(xiàn)問(wèn)題,定時(shí)器一次接一次執(zhí)行,不給時(shí)間去處理收到的數(shù)據(jù),怎么讓定時(shí)器的優(yōu)先級(jí)小于處理端口收到的數(shù)據(jù)?效果:先處理完數(shù)據(jù)再去判斷是否執(zhí)行下一次定時(shí)器