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

StackOverflow https://stackoverflow.com/questions/847854

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

вы могли бы сделать это с помощью Java или Flash, но это не очень приятно (javascript 4tw!).

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

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

прямое подключение к Jabber-серверу через JavaScript
Возможно, я проспал последние изобретения ajax, но, черт возьми, вы можете общаться только с хостом, с которого исходит файл исходного HTML (игнорируя greasmonkey и дополнения). никаких разных доменов, никаких разных портов, и точка. если вы не собираетесь научить свой jabber-сервер передавать HTML-страницу чата в браузер, это станет проблематичным.более того, оставаться на связи даже не работает, потому что это потребует многочастных ответов.они поддерживаются только Mozilla, и Вот почему гадкий утенок КОМЕТА вообще существует. Comet сама по себе является обходным решением, позволяющим избежать невозможности удерживать соединения при передаче данных.

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Решение 2:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top