Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> php socket, блокируется страница 
V
    Опции темы
Incinerated
Дата 24.2.2012, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Есть UDP сервер, который должен отсылать клиентам информацию 2 раза в секунду. Клиент это PHP скрипт. Проблем с получением информации нету. Проблема в том, что цикл блокирует отображение информации на странице:
Код

while (true)
{
    $out = socket_read($socket, 2048);
    if ($out)
           echo $out . "\n";
}

это простой пример....
в с++ блокирование основого потока решается введением нового потока. А как сделать это в php? и возможно ли это?!
Спасибо.
PM MAIL   Вверх
Pfailed
Дата 24.2.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 1
Всего: 39



Это веб-скрипт? А как вы это себе представляете? Страница загрузилась но скрипт продолжает принимать данные из сокета (и что с ними делать)? 


--------------------
PM MAIL   Вверх
Incinerated
Дата 24.2.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Цитата(Pfailed @ 24.2.2012,  16:47)
Это веб-скрипт? А как вы это себе представляете? Страница загрузилась но скрипт продолжает принимать данные из сокета (и что с ними делать)?

не знаю  smile я понимаю что это работать в таком виде, как я написал, не будет.... Может это как то можно сделать с помощью Ajax, чтобы скрипт вызывался каждые 500 милисекунд... но не знаю хорошая ли это идея 2 раза в секунду открывать и закрывать соединение с сервером... или можно как то оставить его открытым после выполнения php скрипта?!
PM MAIL   Вверх
Pfailed
Дата 24.2.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 1
Всего: 39



Ну да, скорее всего вам нужно в сторону Ajax.  Погуглите по словам "Long Poll" и "Comet".


--------------------
PM MAIL   Вверх
Fortop
Дата 26.2.2012, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(Incinerated @  24.2.2012,  16:04 Найти цитируемый пост)
в с++ блокирование основого потока решается введением нового потока. А как сделать это в php? и возможно ли это?!

Неблокирующие сокеты
Вынесение задачи в демон.

Можно конечно и форкать процесс, но демоном экономичнее


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 26.2.2012, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Incinerated, Тут надо определится, где будет "2 раза в секунду клиентам данные отдавать", а где будет страничку в браузер генерировать. Вероятнее всего это 2 разных скрипта.
Разумнее, imho, отдавать данные скриптом, который работает в CLI. Данные, которые нужно отображать на странице он складывает в общедоступное место. Если этих данных много и/или меняются они часто - то в память, иначе - без разницы, хоть в базу.

Скрипт, формирующий страницу просто проверяет какую порцию данных он уже вывел и дочитывает не выведенное.
Второй скрипт - типичный ajax-опрос. Хотя, если таких клиентов будет много - можно подумать и про Commet.





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Incinerated
Дата 28.2.2012, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Сервер, который отдает данные написан на C++, так требует заказчик... А клиент должен видеть результаты работы сервера посредством браузера smile Я выбрал PHP для этого... В принципе вроде бы все работает. Проблему решил посредством Ajax запроса с интервалом. Конечно приходиться открывать/закрывать соединение заново... но вроде работает хорошо smile тестировал 2 дня, без ошибок пока что smile.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.