Php 发送消息回调后的jaxl
我想在jaxl中已经发送了一条消息之后执行一些代码。 哪种回调适合这种情况Php 发送消息回调后的jaxl,php,xmpp,xmpphp,Php,Xmpp,Xmpphp,我想在jaxl中已经发送了一条消息之后执行一些代码。 哪种回调适合这种情况 public function test() { require_once 'JAXL/jaxl.php'; global $client; $client = new JAXL(array( 'jid' => 'user@localhost', 'pass' => 'password',
public function test() {
require_once 'JAXL/jaxl.php';
global $client;
$client = new JAXL(array(
'jid' => 'user@localhost',
'pass' => 'password',
'log_level' => JAXL_INFO
));
$client->add_cb('on_stream_features', function($stanza) {
global $client,$thisObj;
$client->send_chat_msg('otherUser@localhost','Message');
});
$client->add_cb('on_message_send',function(){ //some thing like this
//some code
});
}
Jaxl库目前不支持此类回调。这是因为当您调用
$client->send_chat_msg()
时,会在底层的输出缓冲区中排队对象。输出缓冲区在套接字准备写入时刷新
在排队之前,XMPPStream
将所有的都序列化(to_string()
),因此底层的JAXLSocketClient
输出缓冲区不知道哪个节正在写就绪套接字上刷新。因此,目前不可能进行此类回调
有一些非权威的方法可以检查邮件的传递状态,例如输出缓冲区是否为空?但这很棘手,不是一个完美的解决方案
实现此类回调的完美方法是在
XMPPStream
的上下文中维护输出缓冲区,然后应通知其底层套接字写就绪状态,最后在通过套接字刷新节之前,XMPPStream
可以执行这些回调。不幸的是,库不是这样设计的。不过,这种回调可能会在未来版本的库中得到支持。谢谢您的回答。我想发送一条消息,然后断开流。对于这种情况,您有什么建议?只需调用$client->send_chat_msg(),将消息排队即可
然后您可以通过调用$client->send_end_stream(),立即将XMPP流结束数据包排队(即断开您的客户端)代码>。另外,不要忘记为断开连接时的事件注册回调。一旦收到该回调,您就可以确定您的消息节已发送。Jaxl库确保按顺序发送消息,即消息包在流结束数据包之前排队,它将保证它们以相同的顺序发送。因此,在您的消息节发送之前,您不会在断开连接时收到
回调。