Знайомство з сервісами передачі повідомлень PHP
Дізнаємося більше про тонкощі основних сервісів передачі повідомлень, доступних у PHP.
- Семафори
- Gearman
- JMS з PHP через QUERCUS
- JMS з PHP через PHPMQ-MANTARAY
1. Семафори
Semaphoreявляє собою модуль PHP, який фактично складається з трьох розширень, які включає семафори, пам'ять, що розділяється, і міжпроцесний обмін повідомленнями (IPC). Цей модуль надає оболонки для сімейства System V IPC функцій і щоб використовувати його в PHP, вам необхідно включити його, тому що він не включений за замовчуванням, тому для включення підтримки System V семафорів PHP використовуйте опцію --enable-sysvsem ; щоб включити підтримку пам'яті System V, що розділяється, скомпілюйте PHP використовуючи опцію --enable-sysvshm ; і для того, щоб увімкнути підтримку повідомлень System V скомпілюйте PHP, використовуючи опцію --enable-sysvmsg .*Примітка: Модуль Semaphore не доступний на платформах Windows.
Для використання міжпроцесного модуля взаємодії (IPC) є набір функцій, перерахованих далі:
- msg_get_queue:Створити або приєднатися до черги повідомлень. resource msg_get_queue ( int $key [, int $perms = 0666 ] ) Повертає ідентифікатор, який може використовуватися для доступу до System V черги повідомлень з цим ключем.
- msg_queue_exists:Перевіряє наявність черги повідомлень. bool msg_queue_exists ( int $key)
- msg_receive:Отримати повідомлення з черги повідомлень. bool msg_receive ( resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize ,mixed &$message [, bool $unserialize = true [, int $flags = 0 [, int &$errorcode ]]] ) Отримає перше повідомлення із зазначеної черги типу,вказаного в захищеномуmsgtype.
- msg_remove_queue:Знищити чергу повідомлень. bool msg_remove_queue ( resource $queue ) Руйнує черга повідомлень задану в queue. Слід використовувати цю функцію лише тоді, коли всі процеси завершили роботу з чергою повідомлень і ви повинні звільнити системні ресурси.
- msg_send:Надіслати повідомлення в чергу повідомлень. bool msg_send ( resource $queue , int $msgtype , mixed $message [, bool $serialize = true [,bool $blocking = true [, int &$errorcode ]]] ) Посилає повідомлення типу MsgType ( який повинен бути більшим за 0) у чергу повідомлень, вказану в queue.
- msg_set_queue:Встановити інформацію в структуру даних черги повідомлень. bool msg_set_queue ( resource $queue , array $data ) Дозволяє змінювати значення msg_perm.uid, msg_perm.gid, msg_perm.mode та msg_qbytes областях основної структури даних черги повідомлень.
- msg_stat_queue:Повертає інформацію зі структури даних черги повідомлень. array msg_stat_queue ( resource $queue ) Повертає метадані для черги повідомлень, вказаних у queue
Gearman- це каркас додатків і призначений він для роботи з кількома процесами і дозволяє програмам виконувати завдання в паралельному режимі та викликати функції між мовами. Gearman може використовуватися в різних додатках: від веб-сайтів з високою доступністю до передачі подій реплікації бази даних і складається з двох основних компонентів: сервер завдань і клієнт/воркер API. Клієнт і воркер API може бути використаний у безлічі мов, але сервер завдань доступний лише як бібліотека C або бібліотека Perl. Цей факт ускладнює можливість запуску сервера на Windows, в основному черезневирішеної залежності від інших бібліотек.
Ви можете встановити платформу програми Gearman двома способами:
- Використовуючи чисту PHP обгортку, названу Net_Gearman за допомогою pear install Net_Gearman .
- Спеціалізоване PHP розширення. []. Це розширення пропонує ООП-інтерфейс для написання Gearman-клієнтів та воркерів.
3. JMS з PHP через Quercus
Як ви, напевно, знаєте, більшість особливостей JMS призначені для служб керованих повідомленнями, які в світі Java дуже підходять, але не підходять для PHP. Для того, щоб використовувати ці функції в PHP, необхідно реалізувати Java з використанням різних технологій, в даному випадку Quercus.
Quercusє 100% реалізацією PHP 5 у рамках Java Caucho Technology, випущений під ліцензією Open Source GPL. Quercus поставляється з великою кількістю модулів PHP і розширень, таких як PDF, PDO, MySQL та JSON, і забезпечує тісну інтеграцію служб Java зі сценаріями PHP, так що використання PHP з JMS дуже зручно. Quercus також пропонує зручний інтерфейс обміну повідомленнями з використанням служби повідомлень Java, так що це дає можливість відправляти та отримувати повідомлення за допомогою реалізації Resin JMS або будь-якої іншої служби обміну повідомленнями, що реалізує JMS, як ви побачите далі в цьому розділі. Для встановлення та використання Quercus у вас є два варіанти:
Resin Web-server
Quercus є частиноюResin Application Serverі вбудований у Resin — таким чином немає потреби в додатковій установці. Щоб інсталювати Resin на Windows, виконайте кроки з www.caucho.com/resin-3.1/doc/resin-web-server.xtp#GettingStarted. Для перевірки установки Resin зайдіть на localhost:8080 у браузері.
Для використання JMS вQuercus, конфігуруйте JMS для PHP і JAVA, для цього вам потрібно встановитиConnectionFactoryіQueue, обидва знаходяться у файлі resin-web.xml у каталозі WEB-INF.

Програмна модель інтерфейсу Quercus передбачає інтерфейс отримання доступу до черги використовуючи викликjava_bean(), який знайде іменований об'єкт у файлі resin-web.xml, у разі це черга. Саме тому, що Queue реалізує інтерфейсjava.util.concurrent.BlockingQueue, PHP скрипт має можливість негайно відправляти дані в чергу за допомогоюoffer()і отримувати їх за допомогоюpoll ().
Сценарій перевіряє POST змінну message і якщо вона встановлена, посилає значення цієї змінної в чергу JMS. Об'єкт, керований повідомленнями (MDB), отримує ці повідомлення і записує їх. Запис відображається сервлетом.
NetBeans IDE та GlassFish







Як тільки ви побачили, що Quercus працює в середовищі IDE NetBeans і GlassFish як сервер, ви можете спробувати використовувати всі можливості JMS і всі інші розширення, які поставляються з Quercus.
4. JMS з PHP через PHPMQ
PHPMQє піринговим набором інструментів обміну повідомленнями з відкритим вихідним кодом для PHP, даючи розробнику PHP здатність виконувати операції JMS, такі як відправлення та отримання повідомлень за чергами та темами, забезпечуючи при цьому доставку та забезпечує постійну передачу повідомлень. Це відкриває нові можливості для PHP-розробників, які тепер можуть отримати доступ до даних так званого бек-офісу, які зазвичай доступні тільки серверам додатків і старим рішенням в області передачі повідомлень.
PHPMQ () Mantaray ()є розподіленою, піринговою, безсерверною системою для вирішення завдання обміну повідомленнями для Java (JMS), C++ та .NET додатків, інтегрується з JBoss, WebLogic та WebSphere. Він пропонує гарантовану доставку, безпеки та транзакцій та підтримує TCP, SSL та HTTP протоколи.
Встановлення PHPMQ: → Завантажте та встановіть шину обміну повідомленнями MantaRay → Налаштуйте MantaRay для включення API RMI та створення реєстру RMI (Див. документацію API RMI на MantaRay проекті) → Запустіть Mantaray як окрему програму → Включити розширення PHP-Java у php.ini — актуальна інформація доступна на www.php.net/manual/en/ref.java.php → Додати phpmq.jar (перебуває тут у zip архіві) та manta.jar ( знаходиться в MantaRay.zip) в php.ini «java.class.path» властивість → Запустіть приклади (chat.php для тем і queue_receiver.php, queue_sender.php для черг)
API обміну повідомленнями PHPMQ включає такі функції:
- enqueue: надсилає повідомлення у чергу з іменем$queueName(string);$userId(string) є ідентифікатором у шині повідомлень. enqueue($userId, $queueName, $message)
- dequeue: повертає текстове повідомлення з черги$queueName(string);$userId(string) є ідентифікатором у шині повідомлень. dequeue($userId, $queueName)
- getQueues: повертає список черг, доступних у шині повідомлень. array getQueues()
- getTopics: повертає список тем, доступних у шині повідомлень. array getTopics()
- subscribe: додає слухача до теми$topicName(string), який отримає не більше, ніж$messagesToCash(number) повідомлень;$userId(string) єідентифікатором у шині повідомлень. subscribe($userKey $topicName, $messagesToCash)
- publishMessage: публікує повідомлення з текстом$msg(string) з темою$topicName(string);$userId(string) є ідентифікатором у шині повідомлень. publishMessage($userKey, $topicName, $msg)
Від перекладача
Хардкорна конфа за С++. Ми запрошуємо лише профі.