Java和C#之间的通信

时间:2009-11-12 04:44:02

标签: c# java interop xmpp

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

7 个答案:

答案 0 :(得分:4)

XMPP不是你想要的。它设计用于在具有中央服务器的计算机之间传递消息。

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

答案 1 :(得分:3)

在我工作的地方,我们使用ICE(http://www.zeroc.com/)。它允许我们在java和C#之间编组二进制数据。这不错。

答案 2 :(得分:2)

Google的协议缓冲区可能是一种选择。它非常便携且非常快。

答案 3 :(得分:1)

回应OP的“回答”......

将“服务器推送”映射到经典RPC模型(例如,由CORBA,SOAP,ICE,RMI等实现)的方法是翻转角色,以便您认为作为服务器的东西填满了RPC中的客户端角色。模式是这样的:

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

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

  3. 客户入睡(或做其他事情......)

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

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

    2. 客户端接收回调对象上的调用/请求,对数据执行某些操作并回复。

答案 4 :(得分:1)

如果我这样做,并且需要低延迟,我可能会考虑内存映射文件或管道。其中任何一个都需要一些JNI和p / invoke编程。

答案 5 :(得分:0)

如果表现很重要,请参阅科学计算中使用的内容。科学家在企业中遇到了同样的问题,需要连接客户端和服务器以及更广泛的语言和平台。也许这个名为Babel的组件绑定工具在其原始域之外会有用吗?接口由SIDL描述(如CORBA中的IDL),但我不知道C#是否已被覆盖。 https://computation.llnl.gov/casc/components/babel.html

答案 6 :(得分:0)

我可能没有明确要求。我正在寻找服务器推送技术,而不是客户端拉动。所以我不确定上述解决方案是否有效。我的C#代码正在监视环境并处理在该环境中生成的某些事件。生成事件时,我会记录一些信息。我要发送给我的java代码的这些信息。正如您所看到的,无论何时发生某些特定事件,C#代码都应充当将数据推送到Java客户端的服务器。 此外,只有一台服务器和一台客户机在同一台机器内运行,因此不存在可扩展性问题。 唯一关心的是性能,因为事件是以0.01秒的速度生成的。 所以这就是我想到XMPP的原因。