- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 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/
我知道这个问题可能已经被问过,但我检查了所有这些,我认为我的情况有所不同(请友善)。所以我有两个数据集,第一个是测试数据集,第二个是我保存在数据框中的预测(预测值,这就是没有数据列的原因)。我想合并两
在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。 下面给出了代码片段供您引用: var1 = output_df['Player'].loc[out
当我在 Windows 中使用 WinSCP 通过 Ubuntu 连接到 VMware 时,它提示: The server rejected SFTP connection, but it lis
我正在开发一个使用 xml web 服务的 android 应用程序。在 wi-fi 网络中连接时工作正常,但在 3G 网络中连接时失败(未找到 http 404)。 这不仅仅发生在设备中。为了进行测
我有一个XIB包含我的控件的文件,加载到 Interface Builder(Snow Leopard 上的 Xcode 4.0.2)中。 文件的所有者被设置为 someClassController
我在本地计算机上管理 MySQL 数据库,并通过运行以下程序通过 C 连接到它: #include #include #include int main(int argc, char** arg
我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着
希望清理 NMEA GPS 中的 .txt 文件。我当前的代码如下。 deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] searchquer
我有一个 URL、一个用户名和一个密码。我想在 C# .Net WinForms 中建立 VPN 连接。 你能告诉我从哪里开始吗?任何第三方 API? 代码示例将受到高度赞赏... 最佳答案 您可以像
有没有更好的方法将字符串 vector 转换为字符 vector ,字符串之间的终止符为零。 因此,如果我有一个包含以下字符串的 vector "test","my","string",那么我想接收一
我正在编写一个库,它不断检查 android 设备的连接,并在设备连接、断开连接或互联网连接变慢时给出回调。 https://github.com/muddassir235/connection_ch
我的操作系统:Centos 7 + CLOUDLINUX 7.7当我尝试从服务器登录Mysql时 [root@server3 ~]# Mysql -u root -h localhost -P 330
我收到错误:Puma 发现此错误:无法打开到本地主机的 TCP 连接:9200(连接被拒绝 - 连接(2)用于“本地主机”端口 9200)(Faraday::ConnectionFailed)在我的
请给我一些解决以下错误的方法。 这是一个聊天应用....代码和错误如下:: conversations_controller.rb def create if Conversation.bet
我想将两个单元格中的数据连接到一个单元格中。我还想只组合那些具有相同 ID 的单元格。 任务 ID 名称 4355.2 参与者 4355.2 领袖 4462.1 在线 4462.1 快速 4597.1
我经常需要连接 TSQL 中的字段... 使用“+”运算符时 TSQL 强制您处理的两个问题是 Data Type Precedence和 NULL 值。 使用数据类型优先级,问题是转换错误。 1)
有没有在 iPad 或 iPhone 应用程序中使用 Facebook 连接。 这个想法是登录这个应用程序,然后能够看到我的哪些 facebook 用户也在使用该应用程序及其功能。 最佳答案 是的。
我在连接或打印字符串时遇到了一个奇怪的问题。我有一个 char * ,可以将其设置为字符串文字的几个值之一。 char *myStrLiteral = NULL; ... if(blah) myS
对于以下数据 - let $x := "Yahooooo !!!! Select one number - " let $y := 1 2 3 4 5 6 7 我想得到
我正在看 UDEMY for perl 的培训视频,但是视频不清晰,看起来有错误。 培训展示了如何使用以下示例连接 2 个字符串: #!usr/bin/perl print $str = "Hi";
我是一名优秀的程序员,十分优秀!