Связь параллельных php процессов

#1 17 октября 2012 в 15:44
Вот допустим есть аякс чат, от каждого клиента на сервер висит запрос, который проверяет в цикле наличие новых сообщений в чате. Кто-то написал в чат сообщение, оно занеслось в базу, каким образом висящие запросы могут узнать о новых сообщениях не подключаясь к базе? У меня только один вариант — через файл, мб есть более цивилизованные методы?
#2 17 октября 2012 в 15:49
только используя что-либо типа websockets
#3 17 октября 2012 в 16:16
Websockets конечно круто, но поддерживается не во всех браузерах, плюс там уязвимость нашли, из-за чего его выключили по-умолчанию в браузерах =(, насколько я помню…
#4 17 октября 2012 в 16:27
Да и к тому же, это лишь более правильный режим поддержки связи с сервером, один хрен у каждого клиента свой php процесс висит, который не догадывается о изменениях в базе, пока к ней не подключится. В случае с websockets, на сервер ещё надо ставить какое нить дополнительное облачное расширение, которое и работает с websockets, а не php и в нём соответственно и происходит обмен данными. А сервер лишь как лог работает.

Я про более приземлённые методы хотел узнать memcached например, и то его нет на хостингах в большинстве своём.
#5 17 октября 2012 в 16:39
к примеру написать приложение чат-сервер
#6 17 октября 2012 в 20:05
а если через AJAX раз в n секунд запрашивать скрипт которому допустим передавать id последнего сообщения у клиента и возвращать ему сообщения, начиная от этого id, ну либо ничего не возвращать? помоему должно работать. по крайне мере в контакте работает по такому принципу.
#7 17 октября 2012 в 21:16
У них висит комет для этого на 25 секунд, кстати не зная этой цифры у них, тоже хотел брать именно её. Так вот, он прерывается в момент, когда скрипт увидит новые события.
Тут посмотрел, memcache есть на моём хосте. Значит можно хранить там сами сообщения, пока их не прочтут. То есть заводить мускул только в момент добавления нового сообщения, дабы занести его в базу и если оно прочтено отметить.
#8 18 октября 2012 в 09:58
Сегодня получил любопытную вещь от саппорта:

Здравствуйте!
Сервер mechached не имеет какого-либо разграничения доступа. Это особенность его работы.
Это означает, что любой пользователь на сервере может прочитать или изменить любые данные, которые есть в хранилище.

Поэтому, на самом деле, практика использования memcached на вирутальном хостинге достаточно сомнительна.
Вам остается решать, использовать ли memcached или нет.

То есть надо ещё и хешировать в 3 короба идентификатор доступа…
#9 18 октября 2012 в 10:44

один хрен у каждого клиента свой php процесс висит

lokanaft
каким образом он висит? и как вообще php процесс связан с клиентом?
процесс завершается после того как данные отправлены в браузер
а висеть, насколько я понимаю, может только что-то типо websockets

на сервер ещё надо ставить какое нить дополнительное облачное расширение

lokanaft
есть сервера на php уже давно
#10 18 октября 2012 в 11:19
Под "висит" я подразумеваю long-polling, то есть клиент посылает запрос и получает ответ лишь когда этот "висящий" процесс решит, что что-то произошло и отдаст это. Сразу же клиент посылает новый запрос и ждёт снова.
#11 18 октября 2012 в 13:24
Если речь идет не про шаред хостинг а хотя бы про VPS я бы посоветовал использовать для чата связку node.js + Socket.IO просто использовать websocket там достаточно много танцев с бубнами нужно делать.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.