Потоковое XMPP и PHP - PullRequest
       16

Потоковое XMPP и PHP

0 голосов
/ 28 января 2012

я создаю веб-сайт, который использует php для подключения к XMPP-серверу и отправки сообщения Тем не менее, у меня проблемы с отправкой / получением сообщений .. Вопрос в том, нужно ли мне повторно подключаться и отправлять имя пользователя / пароль каждый раз, когда я делаю запрос (отправляю сообщение)? как избежать переподключения?

Вот как я подключаюсь:

    $this->_socket = fsockopen("sever.tld", 5222, $errno, $errstr, 30);

Я отправляю сообщения, используя fwrite. Вот так:

    fwrite($Socket, $data);

Я читаю сообщения, используя fread. Вот так:

    $response = @fread($this->_socket, 1024);

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Подход, который вы используете, не будет работать в долгосрочной перспективе.

Поскольку экземпляр PHP фактически перестает существовать, когда он завершает отправку страницы обратно клиенту браузера, соединение, которое вы устанавливаете с сервером XMPP, закрыто. Это означает, что все состояние (сеанс TLS, аутентификация и т. Д.) Потеряно.

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

Пожалуйста, не делай так. Вы можете использовать адаптер на стороне XMPP-сервера, такой как XMPP поверх BOSH , предназначенный для этой цели, или постоянное соединение на стороне HTTP-сервера через некоторый демон или более длительный процесс, который разделяют ваши экземпляры PHP.

1 голос
/ 29 января 2012

Используйте следующую петлю, чтобы предотвратить закрытие соединения:

while (!feof($this->_socket)) {

}

И поместите всю свою логику внутрь. Он будет бесконечно работать в цикле, пока соединение еще активно (что будет, пока вы его не уничтожите).

...