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

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

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


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

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

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

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

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

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

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

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

В общем итог ясен, оставляю пока все как ест. Спасибо всем за участи, видимо на этом можно обсуждение будет свернуть.
 
Stierus
Это называется терминалом торговца. Например, Reuters для межбанковского forex-а, Swift, терминалы на биржах, и т.д.

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

-~{}~ 20.09.07 15:17:

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

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

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