标签: ejabberd

当用户失去连接时,ejabberd在线状态

我有ejabberd设置为移动应用程序之间的xmpp服务器,即.自定义iPhone和Android应用.

但我似乎陷入了对ejabberd处理在线状态的限制.

场景:

  • 用户A通过他们的手机向用户B发送消息.
  • 用户B失去所有连接,因此客户端无法与服务器断开连接.
  • ejabberd仍然将用户B列为在线.
  • 由于ejabberd假定用户B仍在线,因此来自用户A的任何消息都会传递给死连接.
  • 因此,用户B将不会收到消息,也不会将其保存为脱机消息,因为ejabberd假定用户在线.
  • 消息丢失了.
  • 在ejabberd意识到连接过时之前,它会将其视为在线用户.

并投入数据连接变化(wifi到3G到4G ......)你会发现这种情况发生了很多.

mod_ping:

我尝试以10秒的间隔实现mod_ping.
https://www.process-one.net/docs/ejabberd/guide_en.html#modping
但是正如文档所述,在断开用户连接之前,ping将等待32秒以进行响应.
这意味着将有一个42秒的窗口,用户可能会丢失其消息.

理想方案:

即使ping等待时间可以减少,它仍然不是一个完美的解决方案.
有没有一种方法可以让ejabberd在丢弃消息之前等待来自客户端的200响应?如果没有响应,则将其保存为脱机.
是否可以编写一个钩子来解决这个问题?
或者是否有一个我错过的简单设置?

仅供参考:我没有使用BOSH.

erlang xmpp ejabberd

23
推荐指数
2
解决办法
7964
查看次数

使用Smack 4.1的XMPP客户端在登录期间给出NullPointerException

我正在尝试使用Smack 4.1.0-rc3来实现连接到ejabberd xmpp服务器的java xmpp客户端.我使用以下代码连接到服务器.

    XMPPTCPConnectionConfiguration connConfig =    XMPPTCPConnectionConfiguration
            .builder()
            .setServiceName("example.com")
            .setHost("192.168.56.101")
            .setPort(5222)
            .setCompressionEnabled(false)
            .setSecurityMode(SecurityMode.disabled)
            .setHostnameVerifier(new HostnameVerifier() {
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            })
            .setUsernameAndPassword(user, pass).build();

    connection = new XMPPTCPConnection(connConfig);
    connection.connect();
    connection.login();
Run Code Online (Sandbox Code Playgroud)

执行'connection.login()'时,我得到以下NullPointerException.

Exception in thread "main" java.lang.NullPointerException
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64)
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60)
at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:199)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:169)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:236)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:365)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:452)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:410)
at org.org.oodlezz.unio.jabber.client.XmppClient.connect(XmppClient.java:88)
at org.org.oodlezz.unio.jabber.client.Client.main(Client.java:32)
Run Code Online (Sandbox Code Playgroud)

我在代码中做错了吗?你能指点一下使用Smack 4.1.0-rc3的正确例子吗?

java xmpp ejabberd smack

23
推荐指数
3
解决办法
6706
查看次数

Ajax jabber/XMPP客户端建议(仅限实际体验)!

我正在为我的利基社交网站建立一个聊天系统,并已决定服务器端的ejabberd,但我找不到任何体面的基于Web的ajax客户端.大多数人似乎在几年前就被遗弃了或者根本就没有工作.我在这看了每一个:

http://xmpp.org/xmpp-software/clients/

有人在运行一个实时网站并使用基于ajax的客户端,他们可以保证这些工作并且正在积极开发中吗?我不介意买东西,但我不想做任何开发工作.

提前致谢.

ajax xmpp ejabberd chatroom

20
推荐指数
3
解决办法
1万
查看次数

将Smack与Android Studio项目集成,用于聊天应用程序

我正在尝试使用ejabberd服务器和smack库实现聊天信使,但很难整合所有的jar和smack的依赖.我正在使用android Studio.

我的build.gradle(模块):

apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"

        defaultConfig {
            applicationId "com.example.nit.xmppclient"
            minSdkVersion 18
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:22.2.0'

        compile "org.igniterealtime.smack:smack-android:4.1.0"
        compile "org.igniterealtime.smack:smack-tcp:4.1.0"
        compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"

        compile 'org.ogce:xpp3:1.1.6'

    }
Run Code Online (Sandbox Code Playgroud)

首先我得到XMLpullparser错误然后我添加了xpp3.但是在我添加了xpp3后,我得到了

Error:Gradle: Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

的build.gradle(项目):

// Top-level build file where …
Run Code Online (Sandbox Code Playgroud)

android xmpp ejabberd smack asmack

19
推荐指数
1
解决办法
5910
查看次数

如何在Erlang中创建全局变量

我正在编写一个ejabberd模块来过滤数据包.我需要使用主机名来提取一些配置gen_mod:get_module_opt().

我有4个重要的功能:

  1. start(Host, _Opt):这是一个加载我的模块的ejabberd函数.我在Host这里得到了原子
  2. filter_packet({From, To, XML}):这是我的数据包过滤器钩子.我无法将自定义参数传递给此函数,因为它是ejabberd中的一个钩子.
  3. get_translation(XmlData):在循环中filter_packet()调用get_translation()
  4. fetch_translation(XmlData):递归调用get_translation().这是我打电话的地方gen_mod:get_module_opt(),因此需要Host.

我的问题是,如何Hoststart()全局变量fetch_translation中获取并将其置于全局变量中以便可以访问它?

erlang hook global-variables ejabberd

15
推荐指数
2
解决办法
2万
查看次数

amqp或xmpp用于实时在线游戏

这些技术套件适用于多用户在线游戏项目..项目要求:1.能够在任何给定时间处理2k-5k用户.2.用于iphone和android的客户端库(原生,没有javascript).3.用于Microsoft Windows的客户端库(最重要的),也用于mac os x和linux.4.专门用于mod开发的良好文档5.项目不是开源的.因此,只能使用具有适当许可证的库.

我也可以在erlang和java中编程,编程语言不是问题.

我正在研究如Openfire,Tigase,ejabberd和RabbitMQ等服务器技术.所有这些对我的项目都有好处,但我想了解更多关于我需要的套件,AMQP或XMPP.

AMQP专门为实时在线游戏提供什么.那么xmpp是更好的选择吗?

xmpp openfire ejabberd rabbitmq

15
推荐指数
3
解决办法
1万
查看次数

如何在注册用户的网站上完全集成XMPP

我们有一个社交网站,人们有联系,我们希望它与XMPP集成.我们目前使用ejabberd XMPP服务器.

这是我的问题:

  1. 如何正确创建帐户?现在,我正在考虑的是我们的网络应用程序上的用户注册,我们调用一个脚本来执行ejabberd命令来创建用户.

  2. 用户认证.用户在我们的网站上登录后,用户将自动登录聊天系统.你如何使用strophe.js在客户端执行此操作?据我所知,你需要提供JID和密码进行身份验证,所以我想在登录时会有一个ajax调用来获取用户的密码,然后在strophe.js的登录调用中使用响应文本.这样安全吗?还有其他方法吗?

  3. 在线注册.我们的网络应用程序有一个联系人系统,但XMPP有自己的方式通过在线订阅添加联系人,对吧?示例:当user1尝试添加user2时,在user1可以成为user2的联系人之前,将向user2询问授权.但由于我们的Web应用程序上已有联系人系统,因此我们希望绕过XMPP的此授权或禁止它,并在user2确认user1为我们网站上的联系人时使用脚本/命令进行授权.我还不清楚,但是一位同事说这可以在ejabberd的模块mod_admin_extra上实现(这个命令将创建订阅而无需客户端授权).是否有可能或者我必须使用脚本手动操作ejabberd数据库(前提是我从默认的Mnesia数据库转移到另一个数据库,比如MySQL).

提前致谢.

php chat xmpp ejabberd

15
推荐指数
2
解决办法
9285
查看次数

ejabberd和推送通知

我已经使用XMPP在我的iOS和Android应用程序中集成了聊天系统.我在服务器端使用了ejabberd 2.聊天系统工作正常.我想在使用APNS和GCM的聊天中集成推送通知.如何向每条聊天消息发送推送通知?ejabberd 2有任何API或扩展可用于实现此功能吗?

帮助很高,

iphone xmpp ejabberd apple-push-notifications google-cloud-messaging

14
推荐指数
2
解决办法
9371
查看次数

如何在Ejabberd中过滤消息

我让Ejabberd和测试用户一起运行,并且工作正常.我想编写一个可以拦截消息并修改它们的模块,如下所示:

  1. 拦截"消息"
  2. 将它们发送到php文件
  3. 从同一个php文件中获取结果(立即)
  4. 修改消息节并将其发送到收件人

ejabberd文档很薄弱,教程也不存在.你能给我一些代码来做这个吗?然后我可以想出如何根据我的需要配置它.

谢谢捆绑!

阿迪尔

erlang hook ejabberd

13
推荐指数
1
解决办法
6981
查看次数

作为回合制MMORPG的核心技术,ejabberd是一个不错的选择吗?

我想我的项目的技术堆栈,我想到使用ejabberd.该项目将看起来像经典的多用户地下城RPG,玩家将从一个地方移动到另一个地方(地点看起来与聊天室完全一样),他们也会在回合制模式下互相想象彼此以及AI .

我从未使用过ejabberd,但我在使用erlang编写服务器应用程序方面有一些经验.

对于这种游戏,ejabberd是否有点矫枉过正?它有很多我不需要的功能.然而,它对于erlang开发者来说是众所周知的,并且也非常稳定和成熟.ejabberd是否值得将它用作我的在线游戏的传输层,或者我应该更好地发明我自己的轮子,一些小而简单的东西?

erlang ejabberd

11
推荐指数
1
解决办法
1862
查看次数