Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

php daemon

15K
15 декабря 2007 года
eviluo
30 / / 30.10.2006
вообщем написал демона на php, но есть проблема с обрывом связи

Код:
<?php
    $host = "localhost";
    $port = 666;
    set_time_limit(0);
    $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or die("Could not create socket\n");
    $result = socket_bind($socket,$host,$port) or die("Could not bind to socket\n");
    $result = socket_listen($socket,3) or die("Could not set up socket listener\n");
    while(1) {
        if(false === ($spawn = socket_accept($socket))) {
            echo "Could not accept incoming connection\n";
            break 2;
        }
        while(1) {
            if(FALSE === ($input = socket_read($spawn,1024))) {
                echo "Could not read input\n";
                break 2;
            }
            switch(strtolower(trim($input))) {
                case "hola" :
                        if(!@socket_write($spawn, "i'm here")) {
                            echo "Could not write to output\n";
                            break 2;
                        }
                    break;
                case "bye" :
                        break 2;
                    break;
                case "gotosleep" :
                        exit();
                    break;
            }
        }
        socket_close($spawn);
    }
    socket_close($socket);
?>


все работает как и должно, но если не написать bye при завершении работы с демоном, а просто закрыть соединение, тогда процессор на сервере грузиться на 100%, как это обойти?
256
15 декабря 2007 года
foxweb
1.0K / / 27.07.2005
Есть какая то информация об ОС?
И вообще демоны на PHP - абсурд. Уж лучше на Perl.
2
15 декабря 2007 года
squirL
5.6K / / 13.08.2003
все логично. у тебя, если не послана команда убить процесс-сервер - судя по всему зависает в socket_read. и крутит его в бесконечном цикле. а бесконечный цикл и грузит процессор на 100%. это нормально. к сожалению, я не знаком с PHP, но судя по документации - read_socket должен возвращать ошибку при обрыве коннекта. я запустил твой код у себя на машине - никакого возврата не происходит. тупо висит. так что - рой доки по языку и работе этой функции


2foxweb
не заставляй ставить штрафные балы такому заслуженному человеку. ответ без смысловой нагрузки =флейм. я не сторонник PHP вообще, но в данном случае - проблема совершенно не в выборе языка.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог