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 流式传输的主要内容,如果未能解决你的问题,请参考以下文章
使用 Ratchet for PHP 通过 WebSocket 流式传输二进制数据