XMPP 和 PHP 流式传输

Posted

技术标签:

【中文标题】XMPP 和 PHP 流式传输【英文标题】:XMPP and PHP streaming 【发布时间】: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);

【问题讨论】:

你是如何连接的?请给我们看一些代码。 我已将代码添加到帖子中 【参考方案1】:

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

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

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

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

【讨论】:

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

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

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


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

【讨论】:

以上是关于XMPP 和 PHP 流式传输的主要内容,如果未能解决你的问题,请参考以下文章

PHP:将远程pdf流式传输到客户端浏览器

使用 PHP 流式传输大文件

使用 Ratchet for PHP 通过 WebSocket 流式传输二进制数据

以编程方式将视频从 php 服务器流式传输到 android

使用 php 流式传输程序的数据,例如 `htop`

使用开源 PHP 流式传输 MP3 [关闭]