php - 发送消息回调后的jaxl

标签 php xmpp xmpphp

我想在 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 .当套接字准备好写入时,输出缓冲区会被刷新。

排队之前XMPPStanzaXMPPStream 序列化 (to_string()),因此底层 JAXLSocketClient 输出缓冲区不知道哪个节在写入时被刷新准备好的 socket 。因此,目前无法进行此类回调。

有一些非权威的方法可以检查您的消息的传递状态,例如输出缓冲区是否为空?但这很棘手,并不是一个完美的解决方案。

实现此类回调的完美方法是在 XMPPStream 的上下文中维护输出缓冲区,然后应通知底层套接字写就绪状态,最后在套接字上刷新节之前,XMPPStream 可以执行这些回调。不幸的是,这不是图书馆的设计方式。不过, future 版本的库可能会支持此类回调。

关于php - 发送消息回调后的jaxl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749500/

相关文章:

安卓/XMPP : presence listener ignores/drops UNAVAILABLE presences

php - 无法使用 XMPPHP 将我的应用程序服务器连接到 GCM 的 CCS

XMPP 多用户聊天获取用户列表

php - 10 到 15 条 XMPP 消息后出现错误 503

php - 基于 XMPP 协议(protocol)的 Google Cloud Messaging(使用 PHP 和 XMPPHP 的服务器)。它是如何工作的?

javascript - 使用 JavaScript 修改 PHP session 变量

php - 使用php和mysql进行数据过滤

php - Chrome 忽略 Firebug 中显示的 CSS 规则

php - 添加带有日期字段的动态行 jQuery

xmpp - libstrophe 和 Strophe jabber id、 session id 和请求 id