$worker->onMessage = function($connection, $data) {
$connection->send($ret);
? ? static $request_count;
? ? // 業(yè)務(wù)處理略
? ? if(++$request_count > 10000) {
? ? ? ? // 請(qǐng)求數(shù)達(dá)到10000后退出當(dāng)前進(jìn)程,主進(jìn)程會(huì)自動(dòng)重啟一個(gè)新的進(jìn)程
? ? ? ? Worker::stopAll();
? ? }
};
我想知道這樣處理的話send出去的數(shù)據(jù)能發(fā)送成功嗎?當(dāng)處理到一定請(qǐng)求之后重啟當(dāng)前進(jìn)程的話。
正常情況下都會(huì)發(fā)送成功,極端情況可能不成功,比如發(fā)送了超大的數(shù)據(jù),數(shù)據(jù)積壓在workerman的數(shù)據(jù)緩沖區(qū)的情況。
?
如果是短連接業(yè)務(wù),最好是有個(gè)判斷 count($worker->connections) == 0 的時(shí)候執(zhí)行重啟。
我這邊最多發(fā)送的數(shù)據(jù)不會(huì)超過(guò)100k 短連接的情況是不是不會(huì)出現(xiàn)發(fā)送失敗。
這個(gè)判斷我加上吧防止萬(wàn)一。謝謝了哈?;貜?fù)的好及時(shí)哈哈
再麻煩問(wèn)下 count($worker->connections) == 0 這個(gè)等于0 是指當(dāng)前進(jìn)程沒(méi)有連接進(jìn)來(lái)是嗎。那如果一直在處理是不是就一直無(wú)法觸發(fā)了。我是寫在onmessage 里面的。最后一發(fā)發(fā)送send的話。這個(gè)值會(huì)為空嗎。
@1:懂了就是定時(shí)檢查次進(jìn)程是否沒(méi)有新連接進(jìn)來(lái)并且已經(jīng)處理了指定數(shù)量的請(qǐng)求之后就重啟這樣是吧。
想再問(wèn)下
$worker->onMessage = function ($connection, $data) {
global $request_count;
$request_count++;
})
$worker->onWorkerStart = function ($worker) {
global $request_count;
Timer::add(10, function () use ($worker, $request_count) {
if ($request_count > Item\Config::$maxRequest&&count($worker->connections) == 0) {
// 請(qǐng)求數(shù)達(dá)到指定數(shù)量請(qǐng)求后退出當(dāng)前進(jìn)程,主進(jìn)程會(huì)自動(dòng)重啟一個(gè)新的進(jìn)程
Worker::stopAll();
}
});
};
//為什么在定時(shí)器里取到的$request_count 一直是null呢。
@1:我寫錯(cuò)了。我改成這樣就行了
$worker->onWorkerStart = function ($worker) {
// 將db實(shí)例存儲(chǔ)在全局變量中(也可以存儲(chǔ)在某類的靜態(tài)成員中)
global $request_count;
$request_count=0;
Timer::add(10, function () use ($worker) {
global $request_count;
if ($request_count > Item\Config::$maxRequest&&count($worker->connections) == 0) {
// 請(qǐng)求數(shù)達(dá)到指定數(shù)量請(qǐng)求后退出當(dāng)前進(jìn)程,主進(jìn)程會(huì)自動(dòng)重啟一個(gè)新的進(jìn)程
Worker::stopAll();
}
});
};