在Java和PHP之间共享内存?

时间:2011-03-02 06:54:16

标签: java php communication shared-memory

有人可以为我提供链接或片段,其中PHP进程写入内存并且Java进程从共享内存中读取吗?

感谢您的精彩回答。

编辑问题: 假设我像这样在

中创建一个共享内存
<?php
$shm_key = ftok(__FILE__, 't');
$shm_id = shmop_open($shm_key, "c", 0644, 100);
$shm_bytes_written = shmop_write($shm_id, $my_string, 0);
?>

现在有一些方法可以传递$shm_id的值,然后在java中读取它。

3 个答案:

答案 0 :(得分:8)

如果您不需要Java和PHP之间的同步交互 - 我会使用memcachedmembase或其他类型的内存密钥存储。

另一种方法是,对于大量数据流,使用Unix命名管道(FIFO)。这是IPC(进程间通信)的常用方法。 首先使用mkfifo命令将管道创建为普通文件。添加一些合理的访问权限。在PHP中打开具有r+模式的管道作为普通文件并写入,最后关闭。在Java端,您将其作为普通文件保持打开状态,并FileInputStream使用阻止read / readline或非阻止NIO连续读取。

与SHM相比,您不必使用JNI,共享内存同步,环形缓冲区实现,锁定和内存泄漏。您可以以最低的开发成本获得简单的读/写和FIFO队列。

您将其删除为普通文件。不要使用随机访问或seek,因为它是没有历史记录的真实流。

答案 1 :(得分:5)

为什么不使用某些消息队列?您无法直接写入JVM的内存或与其他进程共享它。

为了在他人之间进行交流,您可以使用Message Queue技术。您可以运行消息队列,PHP可以轻松地传输数据。 java应用程序可以读取队列,获取数据并进行相应的处理。

答案 2 :(得分:1)

为了扩展Abdel的答案,我建议RabbitMQ,它有Java和PHP客户端。