Чат на сокетах

Тема в разделе "PHP", создана пользователем Acidrayne, 2 июн 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Добрый день пишу чат на сокетах, серверная часть написана пишу клиентскую и тут столкнулся с такой проблемой: работа функции socket_read();

    PHP:
     global $socket;
            
    socket_write($socket$msgstrlen($msg));
            echo 
    "сообщение серверу отправленно.\n";
            
    $out socket_read($socket1024);
            if (
    $out == FALSE){socket_last_error(); break;}
            echo 
    $out;
            
    Тоесть пока на сервере есть сообщения для чтени она работает нормально, как только сообщения заканчиваются а читаю сокет я раз в 10 секунд, то скрипт подвисает! помогите разоюбраться с моей проблемой
     
  2. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Потому что socket_read() ждет новые данные, если очередь пуста. И не закончит выполняться, пока не появится что читать. Читай про неблокирующие сокеты и php.net/socket_set_nonblock
     
  3. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Не могли бы вы привести пример, потому как использование этой функции идет при условии использования функций socket_listen и socket_bind. Если кто занет подскажите как на клинте реализовать постоянное прослушивание сокета к которому мы подключены и как только там появятся данные сразу их выводить ???
     
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Идем в гугл, пишем "неблокирующие сокеты". Получаем
    http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=60770
    http://www.php.ru/forum/viewtopic.php?t=9281&view=previous
    http://xpoint.ru/forums/programming/PHP/thread/37458.xhtml
    ...

    Потом идем в codesearch, вбиваем socket_read socket_set_nonblock lang:php - получаем тьму готовых исходников (рабочих!). Выбирай любой.

    На крайняк набираем в адресной строке php.net/socket_read и ищем на странице (по Ctrl+F) слово "nonblock". Видим комент от некоего florin, начинающийся со слов Here is a working solution for using socket_read in nonblocking mode

    Короче было бы желание..
     
Статус темы:
Закрыта.