$io->on('connection', function($socket)use($io){
? ? ? ? echo "new connection coming\n";
? ? ? ? $time_interval = 3;
? ? ? ? $n = 0;
? ? ? ? Timer::add($time_interval, function() {
? ? ? ? ? ? global $io,$n;
? ? ? ? ? ? $io->emit('sendLatest', $n++);
? ? ? ? });
});
\Workerman\Worker::runAll();
兩個(gè)問(wèn)題,麻煩各位幫忙解答一下:
1.當(dāng)頁(yè)面打開(kāi)第一個(gè)頁(yè)面時(shí)$n是從0開(kāi)始返回的,但是打開(kāi)第二個(gè)頁(yè)面時(shí)$n是從第一個(gè)頁(yè)面的數(shù)字開(kāi)始返回,怎么才能每個(gè)請(qǐng)求使用一個(gè)$n呢?
2.當(dāng)打開(kāi)多個(gè)頁(yè)面時(shí),返回的時(shí)間間隔明顯小于3秒了,打開(kāi)越多,間隔越小,有時(shí)候一下子返回好幾個(gè)
$io->on('connection', function($socket){
? ? ? ? //all_sockets保存所有的socket
? ? ? ? global $all_sockets;
? ? ? ? //給每個(gè)socket添加個(gè)屬性n記錄自增值
? ? ? ? $socket->n = 0;
? ? ? ?$all_sockets = $socket;
});
$io->on('disconnect', function($socket){
? ? ? ?//連接關(guān)閉時(shí)把socket從all_sockets里刪除
? ? ? ??global $all_sockets;
? ? ? ?unset($all_sockets);
});$io->on('workerStart', function() {
? ? Timer::add(3, function(){
? ? ? ? global $all_sockets;
? ? ? ? foreach ($all_sockets as $socket) {
? ? ? ? ? ? ? ? $socket->emit('sendLatest', $socket->n++);
? ? ? ? }
? ? });
});
感覺(jué)你的業(yè)務(wù)邏輯應(yīng)該是這樣的,大概意思是這樣,有報(bào)錯(cuò)自己解決下
果然是可以的,追加一個(gè):如果用戶(hù)關(guān)閉了瀏覽器,我看并沒(méi)有調(diào)用disconnect,也就是說(shuō)如何釋放掉連接呢?