Java和C#之间的通信

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

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

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

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

回应OP的“答案”……

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

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

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

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

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

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

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

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

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

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

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