Совместное использование памяти между Java и PHP? - PullRequest
4 голосов
/ 02 марта 2011

Может ли кто-нибудь предоставить мне ссылки или фрагменты, где процесс 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_id и затем прочитать его в Java.

Ответы [ 3 ]

8 голосов
/ 02 марта 2011

Если вам не нужно синхронизированное взаимодействие между Java и PHP - я бы использовал memcached , membase или другой тип хранилища ключей памяти.

Другим способом для огромного объема потока данных является использование именованного канала Unix (FIFO). Это распространенный способ в IPC (межпроцессное взаимодействие). Сначала создайте канал как обычный файл, используя команду mkfifo. Добавьте некоторые разумные права доступа. В PHP откройте канал с режимом r+ как обычный файл и напишите, наконец, закройте. На стороне Java вы сохраняете его открытым как обычный файл и непрерывно читаете FileInputStream с блокировкой read / readline или неблокирующим NIO.

По сравнению с SHM вам не нужно играть с JNI, синхронизацией совместно используемой памяти, реализацией кольцевого буфера, блокировками и утечками памяти. Вы получаете простое чтение / запись и очередь FIFO при минимальных затратах на разработку.

Вы удаляете его как обычный файл. Не используйте произвольный доступ или seek, поскольку это реальный поток без истории.

5 голосов
/ 02 марта 2011

Почему вы не используете некоторые очереди сообщений?Вы не можете буквально записывать в память JVM или делиться ею с другими процессами.

Для связи между другими людьми вы можете использовать технологию Очередь сообщений .Вы можете запустить очередь сообщений, и PHP может легко передавать данные.Java-приложение может читать очередь, получать данные и обрабатывать соответственно.

1 голос
/ 02 марта 2011

Чтобы расширить ответ Абделя, я бы порекомендовал RabbitMQ , который имеет клиенты Java и PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...