可以使用Strophe在java(jvm)上与Bosh管理器建立Bosh连接吗?

Can Strophe be used to make an Bosh Connection with Bosh Manager on java(jvm)?

本文关键字:Bosh 管理器 建立 连接 上与 Strophe java jvm 可以使      更新时间:2023-09-26

我有一个使用strophe的工作xmpp web客户端,我目前的方法是从java脚本上的strophe登录用户,但从安全的角度来看,它是不安全的,在我的应用程序中,我必须迅速切换页面,在互联网上搜索时,我发现Jake Moffitt已经给出了实现会话的解决方案,克服了这两个限制,正如他在书中提到的"使用java脚本的专业xmpp",可以很容易地实现会话并在服务器上获得SID和RID[必须从服务器创建xmpp bosh连接]并将其传递给java脚本(jid, SID和RID),这将比在attach()方法中使用连接xmpp bosh管理器,

我使用java作为服务器端语言,而有些人试图在java中实现boshclient,似乎java smack和jbosh是唯一可用的解决方案(我的意思是工作解决方案),但是我找不到任何方法,我可以得到RID和SID使用java脚本,我通过另一种方法

为什么不在jvm上运行strophe客户端(为什么要在jvm上运行strophe ?)我能摆脱和sid在java脚本使用诗节提到这个链接,为什么每个人都应该试一试这个解决方案在java)我在动态web项目包括rihno js.jar我在WebContent/lib文件夹WEBINF/lib和给一个限定路径运行env.rihno.js创建一个浏览器运行时java和包括strophe.js jquey.js文件并尝试连接到波什克林特·当我在javascript的web应用程序,

代码:

Context cx = ContextFactory.getGlobal().enterContext();
            cx.setOptimizationLevel(-1);
            cx.setLanguageVersion(Context.VERSION_1_5);
            Global global = Main.getGlobal();
            global.init(cx);
            Main.processSource(cx, "/home/devwrat/workspace/Test/env.rhino.1.2.js");
            Main.processSource(cx, "/home/devwrat/workspace/Test/jquery-1.11.1.js");
            Main.processSource(cx, "/home/devwrat/workspace/Test/strophe.js");
            Main.processSource(cx, "/home/devwrat/workspace/Test/boshconnection.js");

似乎一切都工作良好的java,直到cinconnection .connect()使用strophe执行在我的java脚本,我观察到它不是连接到bosh管理器。

我的问题如下是否可以在java中使用strophe建立bosh连接?是的,怎么做?

thanks in advance!!!!

编辑(21-8-2014):我观察到,在执行conn.connect(Arthur。jid,亚瑟。密码,function (status){print(status);}),status为1,反过来表示连接状态正在连接,它总是说连接从未连接??可能是xmpp管理器没有验证连接!!

Strophe.js通常与客户端javascript一起使用。我认为尝试在服务器端运行Strophe.js会增加不必要的复杂性。

您提到了两个独立的问题,将身份验证移到服务器端,以及在页面更改之间维护会话。

问题#1将认证移动到服务器端(预绑定)

如果您想将登录过程移到服务器端,那么您可以通过使用基于java的XMPP库或手动创建并发送身份验证过程所需的节(不难,它基本上只是通过HTTP发送的XML)来实现。一旦服务器端建立了BOSH会话,会话的JID+RID+SID属性就可以传递给客户端javascript,并由Strophe的attach()使用。

为了编写自己的BOSH预绑定,您应该首先检查Strophe和ejabberd之间交换的节,并且还应该阅读XEP-206。总之,您需要创建某种类型的HTTPClient,将其指向ejabberd的/http-bind/地址,并开始向它发送strophe在登录期间发送的相同消息。您总是可以使用浏览器的网络调试器或Fiddler2(我推荐使用这个)检查消息(节)。一旦理解了Strophe如何建立会话,就可以开始编写自己的服务器端机制来建立会话。一旦服务器端建立了会话,您就可以提取SID+RID+JID,并将它们发送到您的页面并与attach()一起使用它们。

问题#2维护页面更改之间的会话

您陈述的第二个问题是您的应用程序频繁地更改页面。如果您想实现一种机制来维护页面更改之间的XMPP会话,可以通过使用strophes attach()与存储JID+RID+SID的机制相结合来实现。我使用LocalStorage和回退到AJAX的组合来实现这一点。

BOSH and XMPP

不能从许多XMPP库中提取RID和SID值的原因是它们不使用这些属性。SID和RID与BOSH一起使用,这使我们能够使用HTTP与XMPP服务器进行通信。对于使用BOSH与XMPP服务器通信的web应用程序,我们有3个层次:XMPP服务器本身、BOSH连接管理器和web应用程序。由于HTTP是无状态的,而XMPP不是(它被设计为维护持久连接),因此我们需要使用一个BOSH连接管理器来维护到XMPP服务器的持久连接。这个连接管理器负责管理我们与服务器的会话,并处理来自web应用程序的间歇请求,它能够使用Comet将消息推送到客户端。

为了使BOSH连接管理器验证来自web应用程序的间歇请求,我们在每个节中包含一个SID和一个RID属性。在会话的生存期内,SID将保持不变,RID将随着每个传出请求增加1。RID适当地增加是很重要的,如果一个带有意外RID的请求被发送到连接管理器,会话通常会结束,连接管理器将返回一个错误。

希望对你有帮助。