- PVSM.RU - https://www.pvsm.ru -
Изучим все детали основных сервисов передачи сообщений доступных в PHP.
Semaphore — это PHP модуль, который на самом делал состоит из трех расширений, и включает в себя семафоры, разделяемую память и межпроцессное взаимодействие (IPC). Этот модуль предоставляет обертки к семейству функций System V IPC; чтобы использовать его в PHP, вам нужно включить этот модуль вручную, так как по умолчанию он отключен; чтобы включить поддержку System V семафоров используйте флаг --enable-sysvsem при компиляции, для включения разделяемой памяти скомпилируйте PHP с --enable-sysvshm, и для включения System V сообщений скомпилируйте PHP с опцией --enable-sysvmsg.
Заметка: модуль семафоров недоступен на платформе Windows.
Для использования модуля межпроцессного взаимодействия (IPC) имеется набор функций, перечисленных далее:
resource msg_get_queue ( int $key [, int $perms = 0666 ] ) bool msg_queue_exists ( int $key)bool msg_receive ( resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize ,mixed &$message [, bool $unserialize = true [, int $flags = 0 [, int &$errorcode ]]] )bool msg_remove_queue ( resource $queue )bool msg_send ( resource $queue , int $msgtype , mixed $message [, bool $serialize = true [,bool $blocking = true [, int &$errorcode ]]] )bool msg_set_queue ( resource $queue , array $data ) Позволяет вам изменять значения, относящиеся к нижележащим процессам хранения очереди.array msg_stat_queue ( resource $queue ) Возвращает мета-данные.Gearman — это фреймворк приложения, используемый для позволения приложениям выполнять задания в параллельном режиме, а также для вызова функций одного языка из другого. Этот фреймворк можно использовать в самых разных приложениях: от high-availability web-сайтов до передачи событий, используемых при репликации баз данных, и состоит из двух основных компонентов: сервер задач и API; API для клиента и API для процесса-работника. Клиентское и API воркера может использоваться в широком спектре языков; сервер задач доступен только как C и Perl библиотеки. Этот выбор делает сложным запуск сервера на платформе Windows.
Вы можете установить фреймворк приложения Gearman двумя способами:
Как вы наверняка знаете, большинство функций JMS спроектированы для сервисов, управляемых сообщениями, которые в мире Java как нельзя кстати, но не применимо к PHP. Для того, чтобы использовать эти особенности, вам нужно реализовать Java используя технологию, в данном случае, Quercus.
Сервис сообщений Java (JMS) — это стандарт передачи сообщений, который позволяет компонентам приложения (Java EE приложения) отправлять и принимать сообщения. Коммуникация также может быть и асинхронная (поставщик JMS может доставлять сообщения клиенту по мере их поступления; при этом клиент на обязан самостоятельно запрашивать сообщения) и достоверная (JSM API будет проверять, что одно сообщение не будет доставлено более одного раза. Слабые уровни надежности доступны для приложений, который могут позволить упустить сообщение или же принять его дважды).
Quercus — это 100% java-реализация PHP5, принадлежащая Caucho Technology, выпущенная под open-source лицензией GPL. Quercus включает много PHP модулей и расширений: PDF, PDO, MySQL, JSON, а также позволяет связывать Java-сервисы с PHP так, что использование PHP с JSM очень удобно. Quercus ещё предлагает удобный интерфейс отправки сообщений, использующий JMS; это позволяет отправлять и принимать сообщения, используя реализацию Resin JSM или же другую реализацию JMS, что вы увидите в следующей секции. Установка и использование Quercus возможна двумя способами, которые мы представим в этой части:
С помощью Resin Web-Server (http://caucho.com/products/resin/download [2]), Quercus является частью Resin Application Server и встроен в Resin — таким образом нет никакой необходимости в дополнительные установках. Для установка Resin на Windows, проследуйте шагам из www.caucho.com/resin-3.1/doc/resin-web-server.xtp#GettingStarted [3]. Для проверки установки resin посетите localhost [4]:8080 в браузере.
Для использования JMS в Quercus, сконфигурирейте JMS для PHP и JAVA, для этого вам нужно установить ConnectionFactory и Queue, оба находятся в файле resin-web.xml в каталоге WEB-INF.

resin-web.xml
<web-app xmlns="http://caucho.com/ns/resin"
xmlns:resin="urn:java:com.caucho.resin">
<!-- - JMS MemoryQueue -->
<resin:MemoryQueue>
<Named>Queue</Named>
</resin:MemoryQueue>
<resin:JmsConnectionFactory/>
<!--
- MyListener receives messages from the queue and stores them in
- the MessageStore
-->
<ejb-message-bean class="example.MyListener">
<destination>#{Queue}</destination>
</ejb-message-bean>
</web-app>
Программная модель интерфейса Quercus предполагает, во-первых, получить доступ к очереди используя вызов java_bean(), которая найдет именнованный объект в файле resin-web.xml, в данном случае это очередь. Именно потому, что Queue реализует интерфейс java.util.concurrent.BlockingQueue, PHP скрипт имеет возможность немедленно отправлять данные в очередь с помощью offer() и получать их с помощью poll().
<?php
if (array_key_exists("message", $_POST)) {
$queue = java_bean("Queue");
if (! $queue) {
echo "Unable to get message queue!n";
} else {
if ($queue->offer($_POST["message"]) == TRUE) {
echo "Successfully sent message '" . $_POST["message"] . "'";
} else {
echo "Unable to send message '" . $_POST["message"] . "'";
}
}
}
?>
Скрипт проверяет POST['message'], и если она установлена, отправляет содержимое в очередь. MBD (Message-driven Bean) получает эти сообщения и записывает их. Результат отображается сервлетом.
Еще один способ установки Quercus предоставляет NetBeans IDE и GlassFish в качестве сервера. Для использования Quercus с NetBeans нужно:





<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<description>Caucho Technology's PHP Implementation, Running on GlassFish Java EE 5</description>
<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quercus Servlet</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.php</welcome-file>
</welcome-file-list>
</web-app>
Таким образом мы объявили сервлет из PHP.
<?php
echo "Hello World!";
phpinfo();
?>
Эта страница печатает «Hello World!» в браузер и некоторую конфигуацию PHP.Структура директорий должна выглядеть следующим образом:

Обратите внимание, что «index.jsp» всего лишь файл-шаблон для начала работа с JSP, is only a template file to get started with JSPs, но не относится к этому тесту.

PHPMQ — открытый инструментарий передачи сообщений для PHP, дающий разработчику возможность проводить JMS операции, такие как отправка и прием сообщений по очередям / темам, при этом обеспечивая доставку и постоянное хранение сообщений. Она открывает новые возможности для PHP-разработчиков, которые теперь могут получать доступ к данным, которые обычно доступны только серверам приложения и старым решениям передачи сообщений.
PHPMQ Mantaray является распределенной, пиринговой, бессерверной системой для коммуникации и передач сообщений для JAVA (JMS), C++ и .NET. Она гарантирует доставку, безопасность и поддерживает протоколы TCP, SSL & HTTP.
API отправки сообщений PHPMQ включает следующие функции:
enqueue($userId, $queueName, $message)dequeue($userId, $queueName)array getQueues()array getTopics()subscribe($userKey $topicName, $messagesToCash)publishMessage($userKey, $topicName, $msg)
Увидев эту статью я захотел её перевести. Просмотрел по диагонали и начал перевод. Где-то к середине уже понял, что материал не дотягивает полностью до уровня хабра. Тем более присутствуют несвязанные и перегруженные предложения. Надеюсь, что это не причина для неопубликования данного материала.
Как обычно, обо всех неточностях прошу сообщать в хабр-почту.
Автор: wapmorgan
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/64108
Ссылки в тексте:
[1] www.phpvs.net/2010/11/30/installing-gearman-and-gearmand-on-windows-with-cygwin/: http://www.phpvs.net/2010/11/30/installing-gearman-and-gearmand-on-windows-with-cygwin/
[2] http://caucho.com/products/resin/download: http://caucho.com/products/resin/download
[3] www.caucho.com/resin-3.1/doc/resin-web-server.xtp#GettingStarted: http://www.caucho.com/resin-3.1/doc/resin-web-server.xtp#GettingStarted
[4] localhost: http://localhost
[5] www.php.net/manual/en/ref.java.php: http://www.php.net/manual/en/ref.java.php
[6] Источник: http://habrahabr.ru/post/228629/
Нажмите здесь для печати.