Возможно ли написать скрипт "досылающий" данные в браузер без закрытия соединения?

MiksIr

miksir@home:~$
Автор оригинала: alekciy [
Перл то перл, но возник вопрос возможности подобной реализации именно на PHP.
Гм, а что, пхп чем-то концептуально отличается от perl? В PHP есть обвязка основных системных функций ядра, разве что не забыть отключить лимиты на время исполнения скрипта и вперед. Пути решения я нарисовал выше. При использовании мультиплексирования на стороне сервера особых недостатков нет.. ну разве что описанное мной кеширование. Пинговать жаваскриптом мона, но накладные расходы великоваты.
 

Krishna

Продался Java
alekciy
Если ты не понял, то я к тому, что JAVA в данном случае ничем не будет отличаться от PHP.

А проблема высосана из пальца. Сделать JSскрипт, который будет дергать сервер раз в секунду на предмет обновления ситуации, а на сервере обеспечить сверхбыстрый ответ на наличие обновлений, такой, чтобы выполнялся 10-20 мс., например. Уже вытянет больше сотни юзверей.


Одно дело таймер пинающий сервер каждый 5 сек и другое дело соединение данный по которому гоняться в момент наступления события. Если пользователь совершает некое действие за 1-2 сек, то ему не приходится ждать еще 4-3 сек пока таймер не пинет сервер.
Пинать сервер можно (и нужно) не только по расписанию, но и по факту совершения юзером неких действий.

А еще я как-то переводил статью, которая может пригодиться в данном контексте.
http://phpclub.ru/detail/article/shared_memory
 

zerok

Новичок
alekciy

чем вас не устраивает ситуация, когда вы посылаете запрос серверу, а сервер отвечает, когда появляются данные ?

сделать такое ajax труда не составит.
 

cDLEON

Онанист РНРСlub
zerok
Тем что если используется апач, то на каждого юзверя будет подниматься новый процесс.
А почему вам нужен именно HTTPStreaming ? Почему нельзя это сделать обычными сокетами ? Тем же Flash Action Script XMLSocket + SocketServer (та же ява)?
 

Stierus

Новичок
Автор оригинала: zerok
alekciy

чем вас не устраивает ситуация, когда вы посылаете запрос серверу, а сервер отвечает, когда появляются данные ?

сделать такое ajax труда не составит.
Мне, например, было необходимо сделать торговый зал, суть состоит в том, что есть куча пользователей, каждый из них может что-то продавать, что-то покупать ... соответственно при желании совершить сделку один пользователь должен вызвать второго для совершения этой сделки, затем оба пользователя должны согласиться на сделку и тогда она принимается сервером. При вызове пользователя к сделке другим пользователям, он как-то должен узнать о том, что его вызывают ... тут и есть вопрос, как это сделать ... отправить запрос от сервера клиенту и ждать от клиента ответ на этот запрос ... у одного пользователя может быть несколько сделок параллельно, его могут вызывать во время проведения сделки и тд и тп?:)

Клиент не посылает никакие запросы серверу, он не знает кто и когда захочет провести с ним сделку, но при возникновении этой ситуации - должен ответить серверу
 

cDLEON

Онанист РНРСlub
Krishna
Решается, только если в конфиг файле сказать НГИНКСу перехватывать запросы к этим скриптам. А если их будет выполнять апач, то и толку от ваших фрон-энд'ов не будет. Т.к. скрипт всё равно будет висеть в апаче.
 

alekciy

Новичок
zerok
Хм.. действительно, это вариант крутить на сервере скрипт в цикле пока не появяться новые данные. Я о таком как-то не подумал.

cDLEON
>Тем же Flash Action Script XMLSocket + SocketServer (та же ява)?
Как я уже писал уэто все прекрасно можно прикрутить через флеш. Вопрос был именно задан в контексте связки HTML+JS+PHP без какого либо прочего софта.

В общем итог ясен, оставляю пока все как ест. Спасибо всем за участи, видимо на этом можно обсуждение будет свернуть.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Stierus
Это называется терминалом торговца. Например, Reuters для межбанковского forex-а, Swift, терминалы на биржах, и т.д.

Я бы не рекомендовал делать этот проект без грамотного аналитика, который знает ответы на все подобные вопросы или может придумать решение.

-~{}~ 20.09.07 15:17:

Krishna
Я вот что подумал ...
если ты ставишь nginx и не разрываешь соединение, все-равно на каждого юзера запускается и висит php-процесс в стеке fcgi.

Nginx не занимается логикой и не сможет узнать, когда досылать новые данные - так что php-процесс должен висеть.

Значит ли это, что надо выписывать fcgi-сервер, который будет держать много соединений от nginx в одном php-процессе?
 

MiksIr

miksir@home:~$
Нет, это значит что нужно делать как я написал ;) Вешать менеджер клиентских соединений, который будет их принимать и держать открытыми. Этот же менеджер принимает команды от внутренней логики через те же сокеты и пробрасывать их клиенту. nginx тут, увы, не подходит.
Совсем нет причины крутить вхолостую процессы PHP. Его можно поднимать на входящее сообщение по параллельному on-demand каналу, отрабатывать и выдавать те самые команды.
Если кто может предложить более красивое решение - велкам.
Если максимально отделить менеджер от логики, то модифицировать его придется очень редко, развивая проект изменением логики на PHP.
 
Сверху