我有ejabberd设置为移动应用程序之间的xmpp服务器,即.自定义iPhone和Android应用.
但我似乎陷入了对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.
我正在尝试使用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的正确例子吗?
我正在为我的利基社交网站建立一个聊天系统,并已决定服务器端的ejabberd,但我找不到任何体面的基于Web的ajax客户端.大多数人似乎在几年前就被遗弃了或者根本就没有工作.我在这看了每一个:
http://xmpp.org/xmpp-software/clients/
有人在运行一个实时网站并使用基于ajax的客户端,他们可以保证这些工作并且正在积极开发中吗?我不介意买东西,但我不想做任何开发工作.
提前致谢.
我正在尝试使用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) 我正在编写一个ejabberd模块来过滤数据包.我需要使用主机名来提取一些配置gen_mod:get_module_opt().
我有4个重要的功能:
start(Host, _Opt):这是一个加载我的模块的ejabberd函数.我在Host这里得到了原子filter_packet({From, To, XML}):这是我的数据包过滤器钩子.我无法将自定义参数传递给此函数,因为它是ejabberd中的一个钩子.get_translation(XmlData):在循环中filter_packet()调用get_translation()fetch_translation(XmlData):递归调用get_translation().这是我打电话的地方gen_mod:get_module_opt(),因此需要Host.我的问题是,如何Host从start()全局变量fetch_translation中获取并将其置于全局变量中以便可以访问它?
这些技术套件适用于多用户在线游戏项目..项目要求: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集成.我们目前使用ejabberd XMPP服务器.
这是我的问题:
如何正确创建帐户?现在,我正在考虑的是我们的网络应用程序上的用户注册,我们调用一个脚本来执行ejabberd命令来创建用户.
用户认证.用户在我们的网站上登录后,用户将自动登录聊天系统.你如何使用strophe.js在客户端执行此操作?据我所知,你需要提供JID和密码进行身份验证,所以我想在登录时会有一个ajax调用来获取用户的密码,然后在strophe.js的登录调用中使用响应文本.这样安全吗?还有其他方法吗?
在线注册.我们的网络应用程序有一个联系人系统,但XMPP有自己的方式通过在线订阅添加联系人,对吧?示例:当user1尝试添加user2时,在user1可以成为user2的联系人之前,将向user2询问授权.但由于我们的Web应用程序上已有联系人系统,因此我们希望绕过XMPP的此授权或禁止它,并在user2确认user1为我们网站上的联系人时使用脚本/命令进行授权.我还不清楚,但是一位同事说这可以在ejabberd的模块mod_admin_extra上实现(这个命令将创建订阅而无需客户端授权).是否有可能或者我必须使用脚本手动操作ejabberd数据库(前提是我从默认的Mnesia数据库转移到另一个数据库,比如MySQL).
提前致谢.
我已经使用XMPP在我的iOS和Android应用程序中集成了聊天系统.我在服务器端使用了ejabberd 2.聊天系统工作正常.我想在使用APNS和GCM的聊天中集成推送通知.如何向每条聊天消息发送推送通知?ejabberd 2有任何API或扩展可用于实现此功能吗?
帮助很高,
iphone xmpp ejabberd apple-push-notifications google-cloud-messaging
我让Ejabberd和测试用户一起运行,并且工作正常.我想编写一个可以拦截消息并修改它们的模块,如下所示:
ejabberd文档很薄弱,教程也不存在.你能给我一些代码来做这个吗?然后我可以想出如何根据我的需要配置它.
谢谢捆绑!
阿迪尔
我想我的项目的技术堆栈,我想到使用ejabberd.该项目将看起来像经典的多用户地下城RPG,玩家将从一个地方移动到另一个地方(地点看起来与聊天室完全一样),他们也会在回合制模式下互相想象彼此以及AI .
我从未使用过ejabberd,但我在使用erlang编写服务器应用程序方面有一些经验.
对于这种游戏,ejabberd是否有点矫枉过正?它有很多我不需要的功能.然而,它对于erlang开发者来说是众所周知的,并且也非常稳定和成熟.ejabberd是否值得将它用作我的在线游戏的传输层,或者我应该更好地发明我自己的轮子,一些小而简单的东西?