小心,库在销毁时不会发送 DISCONNECT 帧。因此,会话将超出实例的生命周期,并在 Artemis 服务器中累积!
(PECL stomp >= 0.1.0)
Stomp::__destruct -- stomp_close — 关闭 stomp 连接
参见 stomp_connect()。
小心,库在销毁时不会发送 DISCONNECT 帧。因此,会话将超出实例的生命周期,并在 Artemis 服务器中累积!
在构造函数/析构函数方法中使用 connect/disconnect 有点奇怪吗?
我有一个案例,其中连接可能保持活动状态,直到 PHP 进程结束
<?php
class MyStompWrapper {
public function doSend()
{
$stomp = $this->connect(); // 返回 Stomp 对象
$stomp->send('/destination', 'message', []);
$this->disconnect($stomp);
// $stomp 仍然存在于此作用域中,因此,连接处于活动状态
}
private function disconnect(\Stomp $stompObj)
{
// 仅取消设置本地 $stomp 指针,实际上并不断开连接
unset($stomp);
}
private function connect():\Stomp
{
// 为简洁起见,省略了 try-catch 块
return new Stomp('url', 'username', 'password');
}
}
?>
这意味着,为了处理断开连接,我必须在相同的作用域内创建和销毁 Stomp 对象。