如何使用 stanza.io 客户端和 ejabberd 服务器在线显示?

Posted

技术标签:

【中文标题】如何使用 stanza.io 客户端和 ejabberd 服务器在线显示?【英文标题】:How to appear online using stanza.io client and ejabberd server? 【发布时间】:2016-08-19 21:33:03 【问题描述】:

我在 ejabberd 上出现在线时遇到问题,我正在为客户做一个聊天客户端,我有这部分代码:

client.connect();
client.on('session:started', () => 
    client.getRoster()
    client.sendPresence();
    onConnect();
);

当我获得会话开始事件时,我将我的状态发送到服务器以向其他用户显示“在线”,但它不起作用,事件名称是否错误?其他功能工作正常我可以发送消息,但只能在离线状态。有小费吗?提前致谢。

【问题讨论】:

【参考方案1】:

确保您的其他客户也有sent their presence,并且您的其他用户是subscribed。

【讨论】:

我正在使用 psi 与客户端进行调试,如果我理解正确,我需要订阅以查看用户是否在线,即使客户端发送存在?我会尝试订阅看看会发生什么【参考方案2】:

您需要将您的存在发送到服务器

this.client.on('session:started', () => 
        this.client.enableCarbons(err => 
        if (err) 
            console.log('Server does not support carbons', err);
        
    );
    this.client.sendPresence();
    );

在保存任何新用户时,我们需要订阅该用户

this.client.subscribe(id);

即使对方用户收到出席类型为订阅

,他们也必须接受订阅
this.client.acceptSubscription(id)

【讨论】:

我们也可以同时发送订阅和接受订阅 是的...我们也可以这样做

以上是关于如何使用 stanza.io 客户端和 ejabberd 服务器在线显示?的主要内容,如果未能解决你的问题,请参考以下文章

Stanza.io 插件 XEP-0012:上次活动

Stanza.io 无法创建 WebRTC 答案

使用stanza.io将自定义属性添加到不在服务器上的存档表中存储消息的消息

如何在 Nativescript 中实现 XMPP 通信?

如何在 Ejabbered 中为 MUC 创建一个持久组?

无法打开 ejabbered Web 仪表板 localhost:5280