Java和C#之间的通信

4
我发现有一个名为GCT - Group Communication Toolkit的.NET工具包,它是JGroup的C#版本。我想知道是否可以将其与JGroup连接起来,使Java和C#客户端相互通信。 如果不行,那么最好的选择是什么,以便让Java程序和C#程序进行通信? 我还发现另一个选择是XMPP实现。 我需要这两个在同一台计算机上运行的程序之间非常快速地传递消息。主要要求是当某些特定事件被触发时,其中任何一个程序都可以向另一个程序发送消息。 欢迎任何想法。

显然,您必须研究过数据库、Web服务或仅使用FileSystemWatcher的XMl文件吧?请参考https://dev59.com/knVD5IYBdhLWcg3wU5-H。 - PRR
6个回答

5

XMPP并不是你想要的东西。它的设计是用于在中心服务器上传递计算机之间的消息。

我建议使用套接字来在应用程序之间传递数据。在C#中,请参阅System.Net.Sockets.Socket类;在Java中,请参阅java.net.Socket类。


3

我工作的地方使用ICE (http://www.zeroc.com/)。它让我们能够在Java和C#之间传递二进制数据。整体来说还不错。


我非常喜欢ICE。我们在工作中使用它,突然间可以轻松地使用不同的语言。这几乎就像在dot net中混合使用语言一样。 - Prof. Falken

2

谷歌的Protocol Buffers可能是一个选择。它非常便携且速度相当快。


1

回应楼主的“回答”……

将“服务器推送”映射到经典的RPC模型(例如CORBA,SOAP,ICE,RMI等)的方法是翻转角色,以便您认为是服务器的事物填充RPC中的客户端角色。 模式如下:

  1. 客户端调用服务器,传递一个回调对象的句柄。

  2. 服务器记住回调对象并返回。

  3. 客户端睡眠(或做其他事情……)

稍后,服务器想要推送一些数据。

  1. 服务器在回调对象上调用“推送”RPC,传递数据。

  2. 客户端接收回调对象上的调用/请求,对数据进行处理并进行回复。


1
如果我在做这件事并需要低延迟,我可能会考虑使用内存映射文件或管道。这两种方法都需要一些JNI和p/invoke编程。

0
如果性能很重要,可以看看科学计算中使用的内容。科学家们面临着与企业相同类型的问题,需要在更广泛的语言和平台上连接客户端和服务器等。也许这个名为Babel的组件集成工具可以超越其原始领域而发挥作用?接口由SIDL(类似于CORBA中的IDL)描述,但我不知道是否已经涵盖了C#。https://computation.llnl.gov/casc/components/babel.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接