问题标签 [rmi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
7415 浏览

java - 我如何保证发送“活着”的心跳?

我们有一个用 Java 编写的 RMI 客户端应用程序,它需要定期向服务器应用程序发送“保持活动”消息。我们将其实现为一个单独的心跳线程,它将保持活动状态消息发送到服务器,然后使用 Thread.sleep() 休眠 15 秒。

线程设置为高优先级:

但是,当客户端运行的机器占用大量 CPU 时,我们会发现心跳丢失,这导致服务器认为我们的客户端应用程序已经死亡。

我们在我的主线程中添加了 Thread.yield() 调用,尽管这并没有解决问题。

有什么方法可以保证在我的应用程序仍在运行时按时发送心跳?

0 投票
2 回答
3045 浏览

java - RMI 的动态代理存根实现

我想了解动态代理存根实现实际上是如何在幕后完成的。根据我阅读的内容,如果没有找到预先生成的存根类,则在导出远程对象时,RMI 运行时将生成一个动态代理来充当存根。然后将该存根绑定到 RMI 注册表,然后由某些 RMI 客户端访问。

问题是:既然存根实际上是一个动态生成的代理,它的类定义在客户端是不可用的,那么为什么客户端仍然能够从 RMI Registry 中检索存根呢?幕后是否发生了某种动态类加载,或者 RMI 是否使用另一种技术来解决这个问题?

0 投票
4 回答
1669 浏览

c# - 服务主机解析 - C# 等效于 RMI 注册表?

我很早就参加了硕士课程,并用 C# 做我的项目,而其他人都在用 Java 做他们的项目。该项目有 4 个服务,并且需要一个将服务名称映射到套接字的名称服务器。讲师建议学生使用 RMI 来构建此注册表。由于我对 Java 不是很熟悉,而且讲师对 .NET 也不是很熟悉,所以我们无法在 C# 中找到一个等价物。有人知道吗?

更新:

我正在寻找一种在不明确知道其套接字的情况下发现 WCF 服务的方法。

更新 2:

我将使用 VS 2008/WebDev 服务器在我的 XP 笔记本电脑上演示该项目。

0 投票
7 回答
2177 浏览

c# - 安全序列化

我正在编写一个客户端/服务器,它允许客户数据在我们的总部和公司内的移动销售人员之间共享。

服务器下载并写入 XML 文件中的客户数据,但也将数据保存在内存中,以便它可以充当本地客户端。

我计划对 ArrayList 进行序列化,以便可以轻松地通过 Internet 发送客户数据。这有多安全?我应该在传输序列化对象之前研究某种形式的加密吗?

0 投票
1 回答
570 浏览

java - 自定义 JVM 中的 RMI/异常处理

我知道自定义 JVM 的行为可能会有所不同,我正在尝试查看我观察到的行为是否与真正的 JVM 相同。此外,我正在寻找某种方法来始终如一地使这些东西发挥作用。

我见过的最糟糕的部分是异常被 JVM 完全吃掉了。例如:

我在我的代码中看到了两个响应,即为“测试”传入 null。一是它记录“NullPointerException”。没有别的,就是那根弦。

另一个是它什么都不记录。代码执行只是停止,并且在运行此代码之后什么都没有(即使调用方法周围有一个 try/catch)

此外,在异常之后,调用线程似乎永远不会继续(使这样的错误非常难以追踪)。

如果我围绕这个方法抛出一个 try/catch 并记录错误,它工作正常。

诚然,我正在使用自定义代码开发一个较旧的 JVM,所以我不希望有太多帮助,但是有没有人看到过这样的行为?也许在旧的 JVM 中?它应该通过网络抛出异常,还是应该在远程系统上打印堆栈跟踪?

将异常包装在 RemoteException 中并重新抛出它是一个合理的解决方案吗?

有什么建议么?(除了规范一个新的 JVM——这远远超出了可能的范围,甚至都不好笑)

0 投票
1 回答
1666 浏览

java - 如何实现 RMI 连接、J2EE 服务的通用测试?

我想实现一个小测试来检查通过 RMI 与 J2EE 服务的连接。它需要是通用的,这样我就可以给它一个属性文件,其中设置了以下属性:

检查端口是不够的,因为其他应用程序可以成功部署在服务器上。我不能假设我们环境中的所有应用程序都具有默认方法(如 ping 方法)的默认服务,这会使它更容易。

有没有我可以使用 java.naming.provider.url 执行的标准测试?

0 投票
3 回答
947 浏览

java - RMI接口设计原则

我目前正在开发一个 RMI 客户端,该客户端将与 RMI 服务器(由我工作的公司的不同部门开发)进行通信。另一个团队拥有该接口,但 IMO 它过于复杂,有许多不同的类型来回传递,以及不必要的 (IMO) 复杂的异常层次结构。

我已经多次表示担心,这种不必要的复杂性是我们以后进行集成时肯定会引发问题的根源,但我并没有得到太大的关注。IMO 它将导致不必要的大量代码共享,而且我们共享的每一个不同的类都是一组需要注意的额外版本控制要求。

有谁知道我可以用来支持我的论点的任何资源/论点。

或者,任何人都可以说服我我在叫错树吗?

0 投票
4 回答
210 浏览

language-agnostic - 远程方法的异常

远程方法异常的最佳实践是什么?

我确定您需要在远程方法实现级别处理所有异常,因为您需要在服务器端记录它。但是之后你应该怎么做?

您是否应该将异常包装在 RemoteException (java) 中并将其抛出给客户端?这意味着客户端必须导入所有可能抛出的异常。抛出一个细节更少的新自定义异常会更好吗?因为客户不需要知道问题的所有细节。你应该在客户端登录什么?我什至听说过使用返回码(也许是为了提高效率?)来告诉调用者发生了什么。

要记住的重要一点是,必须告知客户出了什么问题。“某事失败”或根本没有通知的通用答案是不可接受的。那么运行时(未经检查的)异常呢?

0 投票
1 回答
11972 浏览

java - RMI-如何通过远程方法传递远程对象?

据我了解,一旦我在两个系统之间建立了 RMI 通信链接,我就可以将实现“远程”的对象传递给采用该类型对象的远程方法之一,而远端只会得到新对象的远程接口(换句话说,它将成为一个新的远程连接,而不是仅仅序列化对象。)

这个对吗?

如果是这样,我认为这与方法签名有关——但我想确切地知道它如何确定它应该创建一个新的远程对象,而不是简单地序列化整个对象。

这真的很难用言语表达。让我试试这个:

假设我有一个客户端和一个服务器系统。在服务器系统上,我创建并发布一个 RMI 对象,在客户端系统上,我检索接口并可以与服务器系统交互。

到目前为止,一切都很好。在客户端上,Object1.remoteMethod() 将在服务器上执行(在对参数进行序列化之后)。

现在,问题来了,在客户端我执行如下代码:

据我了解,到那时,我的系统将有一个新的通信机制:

此时,如果服务器调用 Object2 上的某个方法,该方法实际上会在客户端上执行。

我想知道系统在什么时候决定这样做而不是仅仅序列化它(就像任何非远程对象一样)。

还是我完全错了,它只是将它序列化,我需要某种“getRemoteInterface()”方法调用来实际创建远程调用?

0 投票
12 回答
3715 浏览

java - 如何提高客户端-服务器架构应用程序的性能?

我们有一个基于客户端-服务器架构的产品。有关使用的技术堆栈的一些详细信息。

  • 客户端 - Java Swing
  • 服务器 - RMI
  • Java 数据库 - 甲骨文

客户端位于世界各地,但 java 服务器和 oracle 数据库位于瑞典的同一台机器上。因此,存在很多网络延迟。位于遥远位置的客户端性能很差。该应用程序用于处理大小超过 50MB 的文件。通常,每个操作需要大约 1000 多个网络调用。

根据您的经验,您如何解决这个问题并提高性能?

编辑:回答几个问题

  1. 文件包含需要处理和更新到数据库的实际业务数据,不能部分发送。
  2. 一些网络调用可以批处理,但需要对代码进行重大重构。这是 2001 年编写的一个非常古老的应用程序。应用程序的设计是这样的,服务器保存所有服务,它们可以跨代码重用,业务逻辑写在客户端。因此,此业务逻辑多次调用服务器,因此是天文数字。

-斯内哈尔