【问题标题】:XMPP and PHP streamingXMPP 和 PHP 流式传输
【发布时间】:2012-01-28 19:59:29
【问题描述】:

我正在创建一个使用 php 连接到 XMPP 服务器并发送消息的网站 但是,我在发送/接收消息时遇到问题.. 问题是每次我发出请求(发送消息)时,我是否必须重新连接并发送用户名/密码? 如何避免重新连接?

这就是我的连接方式:

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

我像这样使用 fwrite 发送消息:

    fwrite($Socket, $data);

我使用 fread 阅读消息就像这样:

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

【问题讨论】:

  • 你是如何连接的?请给我们看一些代码。
  • 我已将代码添加到帖子中

标签: php ajax tcp streaming xmpp


【解决方案1】:

你使用的方法从长远来看是行不通的。

由于 PHP 实例在完成将页面发送回浏览器客户端后实际上不再存在,因此您与 XMPP 服务器的连接将关闭。这意味着所有状态(TLS 会话、身份验证等)都会丢失。

所以是的,如果你这样做,你必须在每次页面加载时重新连接并重新验证。

请不要这样做。您可以使用为此目的而设计的 XMPP 服务器端适配器,例如 XMPP over BOSH,或者通过您的 PHP 实例共享的某个守护进程或寿命更长的进程的 HTTP 服务器端持久连接。

【讨论】:

  • 不幸的是我无法访问 XMPP 服务器端,我唯一的访问权限是通过 HTTP 服务器端
  • @user1175643 好吧,你遇到了问题。 PHP 实例的生命周期比 XMPP 会话的生命周期短,但是当 TCP 连接关闭时 XMPP 会话被放弃。你需要一些东西来充当这里的看门人。
  • @user1175643 我相信 xmppphp 支持持久连接。
【解决方案2】:

使用以下循环防止连接关闭:

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

}

把你所有的逻辑都放在里面。当连接仍然处于活动状态时,它将无限循环地运行(直到你杀死它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多