morozovsk / websocket

simple php websocket server + demos + yii/yii2 integration + php 7 support
368 stars 74 forks source link

Как сделать многопоточность? #34

Closed micronull closed 7 years ago

micronull commented 7 years ago

У меня при соединении по некоторым клиентам будет осуществляться рассылка больших объемов данных, как сделать чтоб они не блокировали работу остальных клиентов? Прикручивать pthreads?

olegius88 commented 7 years ago

Здравствуйте. На сколько я знаю, то когда подключается клиент, то создается отдельный поток, поэтому блокировки не происходит

micronull commented 7 years ago

@olegius88 это на каком драйвере? Проверил на event, блокирует. По умолчанию тоже.

Проверял следующим способом: В onMessage поставил цикл со sleep(1) и вывел принимаемые сообщения. В итоге от второго клиента сообщение вывелось только после того, как завершился цикл от первого клиента.

morozovsk commented 7 years ago

покажите код

olegius88 commented 7 years ago

'eventDriver' => 'event' Странно. Попробуйте длинный цикл поставить: for ($i = 1; $i <= 10000000000000; $i++) { } будет ли аналогичная ситуация?

morozovsk commented 7 years ago

передавать много данных и передавать долго - это разные понятия. как только вы вызовете команду отправить в сокет много данных, то они запишутся в память, а на клиент будут передаваться частями параллельно с другими пользователями, а так можно было и пример со sleep(3600) привести.

micronull commented 7 years ago

@morozovsk Спасибо, теперь понятно.