在Java和PHP之间共享内存?

在Java和PHP之间共享内存?,java,php,communication,shared-memory,Java,Php,Communication,Shared Memory,有人能给我提供PHP进程写入内存和Java进程读取共享内存的链接或代码片段吗 谢谢你的精彩回答 编辑问题: 假设我像这样在php中创建一个共享内存 <?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\u

有人能给我提供PHP进程写入内存和Java进程读取共享内存的链接或代码片段吗

谢谢你的精彩回答

编辑问题: 假设我像这样在php中创建一个共享内存

<?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\u id
的值,然后用java读取它。

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


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

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

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

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


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

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

实际上,我有一个共享内存,我的PHP代码在其中写入一些实时数据。这些数据实际上是巨大的。现在我想让我的java代码读取这个内存。@ayush,据我所知,PHP API使用POSIX API来处理共享内存。您可以做的是使用JNI例程,并尝试通过它访问共享内存。我认为这是唯一的沟通方式,如果你坚持使用共享memory@ayush,数据有多大?消息队列主要由数据库支持,可以处理相当大的数据。做你自己的JNI包装是一个好主意,如果你是按小时支付,没有人计算。。。。不算维护噩梦。@Yar:数据大小就像每秒接收1000个字符。它是什么类型的数据?二进制还是文本?什么时候?Java进程是独立的应用程序还是web应用程序?它的文本数据和数据是从服务器连续获取的。Java进程是一个独立的应用程序。