当前位置: 首页 > 知识库问答 >
问题:

两个Java文件之间的通信

毋树
2023-03-14

我有一个Minecraft服务器,它被配置为根据游戏中发生的事件更改我的LED灯条的颜色,但是,此服务器仅在我的计算机上运行时才起作用。这是因为它需要使用Arduino来控制LED灯条。

我想知道是否有任何方法可以通过两个不同的jar文件进行通信,这样当Minecraft中发生事件时,它就会通过一个完全不同的文件告诉我的计算机。

例如:我使用像Server.pro这样的《我的世界》服务器托管商。每当玩家受到伤害时,我都会检测到。当一个玩家被损坏时,我希望能够从主机通知我的电脑。所以像这样:

onDamage() {
     Print_to_other_computer(“damaged”);
}

我怎么会做这种事?我的问题是,我不知道从哪里开始这两个文件之间的通信。可能是数据库?

共有2个答案

商焕
2023-03-14

问题真的很宽泛。有了这个答案,我将试着把重点放在概念和概述上。负债太难了,因为有太多的选择。

文件由字节组成。它们可以用来编码许多不同种类的内容。字节可以编码文本、音乐、视频、逻辑,...

包含用编程语言编写的可执行逻辑的文本文件。在大多数情况下,你需要先编译这些文本文件,以创建一个“二进制”或“可执行”文件,然后由操作系统执行。

程序或应用程序由二进制文件组成。可以执行二进制文件。二进制/可执行文件的运行实例称为“进程”。

执行后台任务的二进制文件通常被称为“服务”。服务通常被安排在操作系统启动/停止时运行。

当进程启动时,它可以读取和写入数据到终端。它使用3个不同的流来做到这一点。A stdin, stdout, stderr.这是应用程序与用户通信的最基本方式。它还可用于与其他应用程序进行通信。

以类似的方式,您也可以使用流通过其他通道进行通信。

当不同的应用程序相互通信时,它们需要通过交换消息以结构化的方式进行。该结构需要遵守所谓的“通信协议”。有时协议依赖于其他协议。

在更高的层次上,应用程序相互通信,通常希望提供一组命令,或者希望共享一组功能。远程执行代码通常称为“RPC”(远程过程调用)。这些共享函数的一组通常称为“API”。

通常提供的功能可以分为4类:创建/读取/更新/删除操作,缩写为“CRUD”。

当进程位于不同的计算机上时,它们需要通过内部(如办公网络)或公共网络(如互联网)进行通信

今天的大多数网络使用以太网协议(即RJ45电缆或wifi),最重要的是,它们使用IP地址来唯一识别每台计算机。通信通常使用TCP完成(这是一种协商,一端监听预定端口上的传入连接,另一端连接到它。然后双方都可以发送/接收消息)。这一起被称为“TCP/IP”。大多数现代通信协议都基于TCP/IP(尽管还有其他流行的协议)。

TCP/IP描述了设备如何创建连接,以及它们如何相互发送字节,但没有规定如何组织这些字节。内容本身也需要一个协议。从历史上看,有很多,有些是编码的,有些是基于文本的。

网络浏览器使用HTTP协议进行通信。这本身就是两个应用程序之间的通信协议。即网络浏览器和网络服务器。但是,HTTP协议也可以成为其他通信协议的基础,例如REST。

REST 是一种 Web 服务协议,用于在不同应用程序之间进行通信。可能是今天最受欢迎的一个。

在许多情况下,如何触发通信以及哪些事件导致通信开始都很重要。

e、 g.在类似REST的协议中,有一个客户端和一个服务器。服务器从不首先联系客户端。是客户端发起通信。

一些协议在客户端和服务器之间保持活动连接,并允许双向推送数据。

有时消息需要立即响应。相比之下,在其他情况下,请求存储在“队列”中并在稍后阶段处理。(同步与异步通信)。

一些人喜欢通过充当缓冲器的第三方进行通信,即所谓的“消息总线”。(参见:kafka,rabbitMQ,JMS for java,...).这些技术更适合异步通信,但不太适合同步通信。它们非常适合松散耦合的系统。

> < li>

文件不通信,进程或服务通信。

协议的选择很困难,因为有很多选择。

没有一刀切的解决方案。

宣熙云
2023-03-14

有很多选择:

  1. 在计算机的“jar文件”(Web服务)上创建一个API,并从Minecraft应用程序调用该API。该接口可以是REST、SOAP、RMI或任何其他现代技术。(Rest是最佳选择)
  2. 启用两个应用程序之间的队列。例如ActiveMQ。然后您就有了发布者-消费者模式
  3. 您还可以使用基于事件的框架,如Axon框架
  4. 您还可以在应用程序之间使用数据库

在两个应用程序之间使用 REST 接口是最简单,也可能是最佳选择。执行此操作的最佳方法是指定一个开放的 API 规范(YAML 文件),然后生成服务器和客户端。

https://www.baeldung.com/java-openapi-generator-server

https://blog.mimacom.com/using-the-openapi-generator-for-spring-boot/

 类似资料:
  • 问题内容: 是否有一个跟踪用户某些事件的表。 总是有一个动作,之后可能会有一个动作。 现在,我想查询这两个动作之间的时间差,以获取用户和之间的time_diff 。 现在,您可以假定没有多个条目(例如,至少一个,最大另一个)。 我想要这样的结果: 问题答案: 您可以使用以下查询: 该子句过滤掉仅包含一个动作的组,例如OP中的with记录。 演示在这里

  • 问题内容: 方法论问题: 我有一个“主” python脚本,该脚本在系统上无限循环地运行,并且我想偶尔与其他一些python脚本一起向其发送信息(例如,json数据字符串),这些脚本稍后将由本人或另一个程序启动并且将在发送字符串后立即结束。 我不能在这里使用子流程,因为我的主脚本不知道其他脚本何时运行以及它们将执行什么代码。 我正在考虑使主脚本在本地端口上侦听,并使其他脚本在该端口上向它发送字符串

  • 问题内容: 我对Controllers and Views(fxml)进行了结构化,以尽可能地分隔我的代码,我想知道如何在2个控制器之间进行通信。我的意思是,一个控制器必须调用另一个控制器的某些功能才能将其设置为最新状态。 我认为我当前结构的模式将更加明确: 控制器1 / \ fx:include fx:include / \ Controller2 Controller3 每个控制器都有自己的f

  • 问题内容: 我的机器在窗口7上运行。我想 在同一机器上运行的两个android仿真器之间进行通信。 仿真器第一个正在侦听某些IP 10.0.2.15,第二个仿真器尝试 创建IP 它给出了异常,无法连接到10.0.2.15,有人知道如何 解决此问题吗? 编辑:我已经读过 https://developer.android.com/studio/run/emulator-networking#conn

  • 我有一个活动- 。在这个活动中,我有两个片段,这两个片段都是我在xml中以声明方式创建的。 我正在尝试将用户输入的文本的传递到Fragment B 我知道一个片段可以使用获得对其活动的引用。所以我猜我会从那里开始?

  • 我做了一个控制器和视图(fxml)的结构来尽可能地分离我的代码,我想知道如何在两个控制器之间进行通信。我的意思是,一个控制器必须调用另一个控制器的一些函数来设置它是最新的。 我认为我当前结构的一个图式会更明确: 精确度: 我在此基础上开发了我的应用程序:http://www.zenjava.com/2011/10/25/views-intern-views-controllers-intern-c