可以使用Strophe在java(jvm)上与Bosh管理器建立Bosh连接吗?
Can Strophe be used to make an Bosh Connection with Bosh Manager on java(jvm)?
我有一个使用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的请求被发送到连接管理器,会话通常会结束,连接管理器将返回一个错误。
希望对你有帮助。
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何访问声音管理器2创建的声音对象
- JS编译器/包管理器,用于版本控制
- Modx数据包管理器ext-all.js错误
- 根据单个用户的决定禁用谷歌标签管理器(选择退出)
- jquery在通过谷歌标签管理器交付时点击不工作
- 删除$fromtataLayertotal-google标签管理器
- 资源管理器9上的html5视频缓存
- 如何在 elfinder(一个 jquery 文件管理器插件)中只显示文件夹列表
- 在全局声音管理器对象上完成
- Web 驱动程序管理器更新错误:EACCES,权限被拒绝
- 声音管理器2 - 停止声音时失真
- 谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组
- 为什么谷歌跟踪代码管理器不能安装在正文下的另一个HTML元素中
- Connect资产管理器文件与req.url不匹配
- 谷歌标签管理器点击事件没有冒泡到家长
- 加载两个脚本块(使用lab.js作为加载管理器)
- 错误管理器:从标准Java到Servlet
- 谷歌地图API v3绘图管理器-地图不渲染
- 可以使用Strophe在java(jvm)上与Bosh管理器建立Bosh连接吗?