【问题标题】:C <> Java communication on multi platforms [closed]多平台上的 C <> Java 通信 [关闭]
【发布时间】:2014-01-21 08:13:57
【问题描述】:

有没有什么有效的方法让 C 程序与 Windows、Linux 和 Mac OS X 上的 Java 程序对话?我尝试了一个简单的 TCP/IP-Server,但它会导致大量 CPU 负载。

没有更简单的方法吗?

【问题讨论】:

  • 看看JNI
  • +1,但实际上它高度依赖于任务细节。您是否尝试过分析和调查对负载影响最大的因素?
  • 您也可以尝试使用共享内存解决方案,但这一切都取决于分析和了解瓶颈是什么。没有这个,你就不能可靠地说明如何解决这个问题。
  • 关于从 Java 高效访问共享内存。来自 odnoklassniki.ru(一个类似于 Facebook 的社交网络)的人讲述了他们如何获得一个基于 Java 的解决方案,在 2x Intel Xeon E5620、64 GB RAM 上提供 70K HTTP reqs/sec 和 3000Mb/s Linux下的共享内存。他们的故事在habrahabr.ru/company/odnoklassniki/blog/148139(俄语,但你可以从代码中了解)
  • JNI 不是一个选择,因为它不允许从 C 调用 Java 方法。但是数据只是一些小的 ASCII 文本(12 个字符),但每秒 250.000 个。

标签: java c communication


【解决方案1】:

对于跨平台通信,如果各方在不同的计算机上运行,​​您可以使用套接字,或者,对于本地通信,您可以使用内存映射文件。

正确编写的套接字服务器应该不会造成过多的 CPU 负载,但很容易实现错误。

我们公司提供MsgConnect 产品(免费提供源版本),它隐藏了构建传输的复杂性,并为各种平台上的进程间通信提供了一个简单的类似 SendMessage 的接口。

【讨论】:

  • 内存映射文件不适用于开箱即用的 Windows。我看看我的socket服务器是不是实现错了。
  • @mythbu MMF 在 Windows 上运行得非常好,尽管它们的使用权并非易事。
【解决方案2】:

这些东西的黄金标准是ZeroMQ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2020-05-05
    • 2021-04-05
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多