gpt4 book ai didi

java - Strope 能否用于在 java(jvm) 上与 Bosh Manager 建立 Bosh 连接?

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:20 26 4
gpt4 key购买 nike

我有一个使用 strope 的工作 xmpp Web 客户端,我当前的方法是从 java 脚本上的 strope 登录用户,但从安全 Angular 来看它不安全,并且在我的应用程序中我必须快速切换页面,在网上搜索SO时,我发现Jake Moffitt给出了一种实现 session 的解决方案,克服了这两个限制,正如他在《使用java脚本的专业xmpp》一书中提到的那样,可以轻松实现 session 并在服务器上获取SID和RID[有从服务器创建xmpp bosh连接]并将其传递给java脚本(jid,sid和rid),该脚本将在attach()方法中使用以与xmpp bosh管理器连接,

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

为什么不在 jvm 上运行 strope 客户端,(为什么要在 jvm 上运行 strope?我能够在 java 脚本上使用 strope 来摆脱和 sid,正如本文 link 中提到的那样,为什么应该在 java 上尝试这个解决方案)我已将 rihno 包含在动态 Web 项目 js.jar 中的 WebContent/WEBINF/lib 中的 lib 文件夹中,并提供了运行 env.rihno.js 的合格路径,该路径在 java 上创建浏览器运行时并包含 strope.js 和 jquey .js 文件并尝试连接到 bosh clint,就像我在 Web 应用程序的 javascript 上所做的那样,

代码::

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上正常工作,直到在我的java脚本中使用strope执行cinnnection.connect(),我观察到它没有连接到bosh管理器。

我的问题如下是否可以使用java中的strope建立bosh连接?是的,如何?

提前致谢!!!!

编辑 (21-8-2014)::我观察到执行 conn.connect(Arthur.jid, Arthur.password, function (status){print(status);}) 后,status 为 1,这又意味着连接状态正在连接,它总是说连接永远不会连接? ?可能是 xmpp bosh 管理器未验证连接!!!

最佳答案

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

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

问题 #1 将身份验证转移到服务器端(预绑定(bind))

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

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

问题#2 在页面更改之间维护 session

您所说的第二个问题是您的应用程序频繁更改页面。如果您想实现一种机制来在页面更改之间维护 XMPP session ,可以通过利用括号 attach() 结合存储 JID+RID+SID 的机制来完成。我结合使用 LocalStorage 和 AJAX 回退来完成此任务。

BOSH 和 XMPP

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

为了让 BOSH 连接管理器验证来自 Web 应用程序的间歇性请求,我们在每个节中包含一个 SID 和一个 RID 属性。 SID 在 session 的生命周期内保持不变,而 RID 将随着每个传出请求而递增 1。正确递增 RID 非常重要,如果将具有意外 RID 的请求发送到连接管理器, session 通常会结束并且连接管理器将返回错误。

希望有帮助。

关于java - Strope 能否用于在 java(jvm) 上与 Bosh Manager 建立 Bosh 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com