使用workerman作为客户端,通过读取redis队列主动发送消息。但感觉消息没有发出去,服务端没有相应。

wzl_admin

截图
截图
截图

2550 2 0
2个回答

six

while(true) 死循环导致的。还有while(true) 会导致cpu 100%的。
业务代码死循环是大忌,最好改成定时器定时lpop。比如改成

// 每隔0.1秒lpop一下
Timer::add(0.1, function() use ($ws_connection){
    global $redis;
    // $message为空的时候跳出循环,就不是死循环了
    while($message = $redis->lpop()) {
        $ws_connection->send($message);
    }
});
wzl_admin

谢谢,已经改成用 Timer了。

  • 暂无评论
年代过于久远,无法发表回答
🔝