PHP Jabber: если я вхожу, проверяю сообщения и отключаюсь, на другом конце пользователя я буду отображаться как отключенный - PullRequest
4 голосов
/ 11 мая 2009

Не уверен, что то, что я делаю, абсолютно правильно. Но здесь идет:

  1. Пользователь входит в чат через веб-интерфейс
  2. Пользователь информируется об обновлениях через Comet
  3. Пользователь вводит данные, которые переходят в файл PHP, который далее подключается к серверу Jabber

Теперь проблема в том, что когда пользователь хочет отправить сообщение, все просто, запустите php, в котором я подключаюсь к серверу jabber и отправляю сообщение. Проблема возникает, когда я жду сообщения. Потому что, если я войду, проверю сообщения и отключусь, на другом конце пользователя я буду отображаться как отключенный.

Я неправильно подхожу к этой проблеме? Должен ли я напрямую подключаться к серверу Jabber (через javascript) вместо промежуточного слоя PHP? Как получать сообщения через PHP?

Ответы [ 3 ]

1 голос
/ 11 мая 2009

Я не пробовал, но вы можете посмотреть на xmpphp . Во-вторых, вы можете подумать о том, чтобы оставить пользователя на сервере XMPP (он же сервер Jabber) до тех пор, пока он входит на ваш сайт. Возможно, вы захотите установить тайм-аут на тот случай, если они покинут ваш сайт и не вернутся.

Что касается того, следует ли вам подключаться через JavaScript, я не понимаю, почему вы не смогли. Я бы посоветовал вам пойти на то, что кажется вам самым простым. Возможно, вы захотите проверить Strophe , о котором я слышал хорошие вещи для этого случая.

Единственная библиотека XMPP, которую я широко использовал, это HeadStock , но для этого необходимо использовать python и Kamaelia .

0 голосов
/ 15 июля 2009

Итак, насколько я могу судить, проблема в том, что когда пользователь Jabber на другом конце отвечает. Проблема там, по крайней мере частично, заключается в том, что пользователь отвечает другому пользователю на сервере Jabber, но вы хотите, чтобы скрипт php знал, что этот ответ произошел без удержания открытого соединения (что имеет смысл, так как скрипт больше не работает, наверное).

Один из вариантов, хотя и очень глупый, это:

  • Иметь скрипт php, который может посредничать с сервером Jabber для отправки и получения для пользователя на вашей странице,

  • Используйте AJAX для отправки сообщений пользователю (AJAX будет указывать на приведенный выше скрипт, скрипт будет отправлять сообщение.)

  • Имейте бесконечный цикл Javascript, который пингует один и тот же скрипт каждые 10 секунд или около того, проверяя, есть ли сообщения. Если они есть, они передаются обратно клиенту и выводятся пользователю.

С вышеуказанным есть только две проблемы:

1) Если пользователь не подключен во время передачи сообщения, будет ли скрипт php по-прежнему видеть / получать сообщение?

2) Цикл на стороне клиента, который делает ajax-запросы каждые 3 секунды, вероятно, будет огромной утечкой.

Решение 2:

OpenFire jabber сервер. Он поставляется со встроенным клиентом веб-чата и имеет надстройку под названием Fastpath, которая предназначена для обработки чатов на основе HTML на стороне клиента (например, функция «чат с агентом сейчас!» На слишком многих страницах поддержки).

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

0 голосов
/ 11 мая 2009

это неотъемлемая проблема (или функция) с http - нет длительных соединений (не совсем). вам нужен обходной путь, реального решения нет.

Вы можете сделать это с помощью Java или Flash, но это не очень хорошо (javascript 4tw!).

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

или, может быть, есть API, который помогает с этим.

прямое подключение к серверу jabber через javascript
Я, возможно, проспал последние ajax-изобретения, но на самом деле вы можете общаться только с хостом, откуда исходит исходный html-файл (игнорируя greasmonkey и addons). нет разных доменов, нет разных портов, точка. , если вы не научите свой jabber-сервер обслуживать ваш chatpage-html в браузере, это будет проблематично. Более того, оставаться на связи даже не работает, потому что это потребует многочастичных ответов. они поддерживаются только Mozilla, и , поэтому гадкий утенок COMET вообще существует. Сама комета - это обходной путь, позволяющий избежать невозможности удерживать соединения при передаче данных.

...