我想在 jaxl 中发送消息后执行一些代码。 哪种回调适合这种情况?
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队列 XMPPMsg底层输出缓冲区中的对象 JAXLSocketClient .当套接字准备好写入时,输出缓冲区会被刷新。
排队之前XMPPStanza由 XMPPStream
序列化 (to_string()
),因此底层 JAXLSocketClient
输出缓冲区不知道哪个节在写入时被刷新准备好的 socket 。因此,目前无法进行此类回调。
有一些非权威的方法可以检查您的消息的传递状态,例如输出缓冲区是否为空?但这很棘手,并不是一个完美的解决方案。
实现此类回调的完美方法是在 XMPPStream
的上下文中维护输出缓冲区,然后应通知底层套接字写就绪状态,最后在套接字上刷新节之前,XMPPStream
可以执行这些回调。不幸的是,这不是图书馆的设计方式。不过, future 版本的库可能会支持此类回调。
关于php - 发送消息回调后的jaxl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749500/