Блокировка ввода-вывода SQL-запроса на сообщение - PullRequest
0 голосов
/ 09 мая 2019

Если кто-то может помочь с моим вопросом, не уверенным, что я упустил что-то фундаментальное в блокировке ввода-вывода, в основном в следующем коде, то толчок происходит постепенно внутри одного клиента, что я и ожидаю, но если У меня есть два или более клиентов, «цикл с сном» выполняется по одному клиенту за раз. Я надеялся, что, если я открою два или более клиентов, значения будут отображаться во всех клиентских системах одновременно. Я просто не уверен архитектурно, как организовать такой код в swoole.

$server = new \swoole_websocket_server("0.0.0.0", 8080, SWOOLE_BASE);

$server->on('message', function (\swoole_websocket_server $_server, \swoole_websocket_frame$frame) {

    for($idx=0; $idx<10; $idx++) {

        // pretend we're doing some blocking process like executing an sql
        sleep(rand(1,2));

        $_server->push($frame->fd, rand(1,10));
    }

});

$server->on('open', function (\swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});

$server->start();
...