Демон на PHP - Второе дыхание

young

Новичок
Демон на PHP - Второе дыхание

Когда-то мною была создана тема - "демон на php - это просто", исходный окд можно найти тут http://detail.phpclub.net/store/sources/class.phpServerApp.phps

Но, он мог обрабатывать только одного клиента в один момент времени. Я выкладываю новую версию, которая способна обслуживать много клиентов одновпеменно:
http://detail.phpclub.net/store/sources/class.phpServerMultiTask.phps
Стоит помнить - клиентов много, но процесс один, и только один запрос в каждый момент времени :)
 

AnToXa

prodigy-одаренный ребенок
угу, и если один запрос буддет выполняться долго(т.е. не как счас просто возвращать, то что ему передали и все), то он заблокирует выполнение остальных.

но в общем все кажется логичным, только сокет, который получается от accept имхо в данном случае не стоит делать неблокирующим
 

young

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

если один запрос буддет выполняться долго
А вот его уже можно при надобности в background
 

AnToXa

prodigy-одаренный ребенок
Автор оригинала: young
А тогда эта фиговина подвиснет на попытке чтения из него
обычно клиент пишет сразу после коннекта, а тут он может не успеть написать пока ты пролетишь этот вызов и потом accept может вернуть еще один коннект, и т.п.
может просто получиться так, что у тебя буддет много фрагментированных данных

А вот его уже можно при надобности в background
да, но на это буддет уходить довольно много времени, хотя такая схема видел, используется и неплохо.
 

young

Новичок
accept может вернуть еще один коннект, и т.п.
может просто получиться так, что у тебя буддет много фрагментированных данных
нет. На одного клиента будет только один acept
А вот избежания фрагментации ввода реализованы буфера
 

AnToXa

prodigy-одаренный ребенок
Автор оригинала: young
нет. На одного клиента будет только один acept
ну клиентов-то может быть много, на каждого по accept
надо ведь рассматривать работоспособность не только в тепличных условиях 1 запрос в минуту, но и 20 запросов в секунду.

А вот избежания фрагментации ввода реализованы буфера
все равно буддет много вызовов read, что отразится на скорости.
хотя это все обсуждаемо :)
 

voodoo

Новичок
в принципе, блокирующий сокет это нормально, ничего не будет висеть, тока надо предварительно select сделать.

этим же решается проблема с "много вызовов read".
 

livsoft

Guest
Re: Демон на PHP - Второе дыхание

Будь добрь ответь как это можно использовать?
желательно с примерами... чую это мне пригодиться но как использовать не могу догнать
:)
 

Stur

Guest
Скажите можно ли обойтись без запуска дочернего процесса?
Дело в том что библиотека -pcntl не поддерживается у меня на хосте. Может быть проще работать в рамках одного процесса например так
PHP:
set_time_limit(0);
ignor_user_abort();
..... 
echo"<script> window.close</script>";
 

ys

отодвинутый новичок
young

а если сделать неблокирующим и использовать socket_select()?

Только я не обнаружил что-нибудь похожего на FD_ISSET(),
чтоб определить какой именно сокет из массива поменял состояние.
 

zumo

Guest
Дело в том что библиотека -pcntl не поддерживается у меня на хосте. Может быть проще работать в рамках одного процесса например так
PHP:
set_time_limit(0);
ignor_user_abort();
Stur прав pcntl почти нигде не стоит надобы чтонибудь придумать ...

Кстати о демонах может ктонибудь видел пример (без лишнего мусора) демона на чём угодно только обязательно многопоточного
 

voodoo

Новичок
perl cookbook.
http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch17_01.htm

Одного не понимаю, чего всем так эта многопоточность в душу запала?
 

zumo

Guest
Напимер я щас пишу flash чат которй через xmlsocket держит конект с сервером сначала на период написания сделал сервак на дельфи ... писал ... писал на флеше а когда всё дописал начал делать нормальный сервак сразу вспомнил пхп открыл мануал взял оттуда пример запустил - работет залил не сервак работет ! только вот в чём бок в таком чате может сидеть только 1 чел - тот кто 1 законектился .. тк пока есть установленое соединение скрипт ни с кам дружить не желает
 

zumo

Guest
вобщем предлагаю в этой теме раз и навсегда обсудить вопрос чат демонов на php .... многопоточных :)
 

voodoo

Новичок
Автор оригинала: zumo
только вот в чём бок в таком чате может сидеть только 1 чел - тот кто 1 законектился .. тк пока есть установленое соединение скрипт ни с кам дружить не желает
с чего бы?
 

zumo

Guest
а с тогобы ..... не конектиться второй - говрит что на секваке этот порт не открыт
 
Сверху