在两个应用程序之间进行通信的最佳和最快方式是啥?

Posted

技术标签:

【中文标题】在两个应用程序之间进行通信的最佳和最快方式是啥?【英文标题】:what is the best and fastest way to communicate between two applications?在两个应用程序之间进行通信的最佳和最快方式是什么? 【发布时间】:2011-09-15 06:48:59 【问题描述】:

我做了一个java程序只是为了好玩这个程序允许你使用第一台计算机的鼠标来控制第二台计算机的鼠标。所以每次鼠标移动一些光标的 x 和 y 时都会发送给客户端应用程序。然后使用机器人类来移动鼠标。现在我正在使用套接字进行通信,而且它真的很慢什么是更好的方法来做到这一点,任何帮助都会得到帮助。如果可能,请提供一些代码 谢谢

【问题讨论】:

嗯,慢从何而来?基准测试! ... 标记 jsp?这个 other 应用程序是基于网络的吗? 哎呀抱歉没有提到jsp错误 【参考方案1】:

如果两个应用程序存在在不同的虚拟机中,那么通过套接字进行通信是一种非常好的方法。

如果太慢可以考虑

使用 UDP 协议而不是 TCP/IP 看看你的服务器/客户端代码,那里的性能可能会被扼杀。

考虑到您对此答案的评论:

当您通过套接字发送 bytes 时,如果您将鼠标位置编码为 byte 值而不是 String,性能将会提高:

int x = getX();
int y = getY();
// let's assume we have a 16Bit / 2Byte range for both values (practica)
byte[] message = new byte[4];
message[0] = (byte) (x >> 8) & 0xff;
message[1] = (byte) x & 0xff;
message[2] = (byte) (y >> 8) & 0xff;
message[3] = (byte) y & 0xff;
sendViaSocket(message);

(它以某种魔法开始和结束,重点是编码)

【讨论】:

向我们展示您发送/接收方法中的一些代码 - 可能存在改进空间 我不确定这是否是一个有效的问题,但我仍然会问。我正在做的是将 x 和 y 字符串发送给客户端,然后客户端解析字符串并将鼠标移动到给定的 x 和 y 这是一个好的方法还是有更好的方法?【参考方案2】:

我猜套接字是你最好的选择。您可以尝试研究有关 JFS(Java 快速套接字)的更多信息,这是西班牙拉科鲁尼亚大学的一个项目,但我不确定他们在这方面走了多远。更多信息here

【讨论】:

【参考方案3】:

两台机器之间的进程间通信有很多方法 - 但我认为它们中的任何一种都不会比原始套接字更快并且适用于鼠标事件:

    使用 JMS 队列 使用数据库 使用 WS

【讨论】:

以上是关于在两个应用程序之间进行通信的最佳和最快方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用回调在 python 2 应用程序之间进行通信的最佳方式是啥?

在硬件上 C++ 和 Python 之间进行通信的最佳方式是啥? [关闭]

在 .NET 中,同一台机器上的两个进程进行通信的最佳方式是啥?

在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥

在 Rust 程序和嵌入式 WebAssembly 运行时之间进行通信的最佳实践是啥?

在 React 组件和服务之间进行通信的最佳实践是啥?