我使用strophe.js在webapp上运行xmpp客户端,根据我的用例场景,我必须快速切换到不同的页面
当前的方法并不安全,因为jid和密码在java脚本中是可见的,我正在寻找解决方案来实现安全性,尝试使连接时间(与bosh)更短,同时阅读“XMPP编程”一书使用JavaScript和jQuery“通过jake moffitt我遇到了一个解决方案,我上面的两个问题都是实现会话机制的元素。它说我们可以使用strophe attach(jid,sid,rid)连接到现有连接,所以我需要SID和RID,我可以从应用程序服务器获取!!!
本书给出了一个用户登录Web应用程序时自动连接到bosh服务器的示例,作者使用python中的Django项目实现了它,因为我使用java作为服务器端语言我尝试使用java实现相同的示例smcak-4.0.3和smack-bosh-4.0.3 但无法连接到bosh服务器(我使用ejabberd作为xmpp服务器)我的代码如下
BOSHConfiguration config = new BOSHConfiguration(false,"192.168.0.106",5280,"/http-bind/","192.168.0.106");
XMPPBOSHConnection xbc=new XMPPBOSHConnection(config);
xbc.connect();
xbc.login("admin", "admin");
System.out.println(xbc.getConnectionID());
堆栈跟踪
java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:352)
at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:347)
at org.jivesoftware.smack.SmackConfiguration.<clinit>(SmackConfiguration.java:155)
at org.jivesoftware.smack.ConnectionConfiguration.<init>(ConnectionConfiguration.java:67)
当我尝试登录到bosh服务器时,它每次都会失败,我不确定这里有什么问题可以解释一下吗?
我发现的另一件事是可以使用“xbc.getConnectionID()”来获取会话标识符(SID)但是如何查找请求标识符?
对上述问题的任何帮助都会很有用!!!!
提前谢谢!答案 0 :(得分:4)
我有类似的问题。 我从/ lib /下载所有smack github我导入smack.jar并从/ src / main / java / org / jivesoftware / smack /
添加3个java文件我尝试通过从/ target /导入smack-bosh-3.2.2-jar-with-dependencies.jar来修复它。我不知道为什么这会起作用。
最后,我读了here你需要下载所有依赖库: jbosh-0.6.0.jar xlightweb-2.5.jar xSocket的-2.4.6.jar xpp3-1.1.3.3.jar DOM4J-1.6.1.jar
所以我使用了/ lib /中的smack.jar和所有的库,这个问题就解决了。
正如我在评论中所说的那样,你需要追踪RID。我使用了jbosh源代码并添加了以下几行:
In com.kenai.jbosh.BOSHClient class
//I introduced a new property
private Long rid;
//commented the following code
//long rid = requestIDSeq.getNextRID();
//and at that place added
this.rid = requestIDSeq.getNextRID();
//and finally added a new getter for rid
public Long getRid() {
return rid;}
然后在smack-bosh:
In BOSHConnection.java
public Long getRid() {
return client.getRid();}
public String getSid() {
return sessionID;}
现在我被阻止导致我的会话被取消。根据我的openFire日志,它是因为过度活跃。所以我正在寻找一种减少在线消息数量的解决方案。
答案 1 :(得分:3)
要获得Android BOSH的最新优势,您需要Smack Releases 4.1.1
SMACK --- smack-tcp smack-sasl-provided smack-resolver-minidns smack-resolver-dnsjava smack-extensions smack-core smack-bosh smack-android-extensions smack-android
你还需要
XPP3 1.1.4c从Android的JAR文件中删除javax包,因为android已经有了javax .... QName class
JXMMP,JXMMP CACHE,JBOSH,MINIDNS,DNSJAVA,JSTUN,XBILL DNS
不需要已在android
中提供的Apache HTTP客户端不幸的是它出现了大约12个JAR文件, 更好地在Eclipse中使用Maven Android Project
否则,请在Maven Central http://search.maven.org/#search搜索上述关键字并逐个获取JAR文件
答案 2 :(得分:1)
堆栈跟踪
java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:352)
at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:347)
at org.jivesoftware.smack.SmackConfiguration.<clinit>(SmackConfiguration.java:155)
at org.jivesoftware.smack.ConnectionConfiguration.<init>(ConnectionConfiguration.java:67)
这里的例外清楚地表明Webapp无法找到类org.xmlpull.v1.XmlPullParserFactory
。听起来你在类路径中缺少xml-apis库(或XmlPullParser
接口的其他一些实现)。