- セマフォ
- ギアマン
- QUERCUS経由のJMSとPHP
- PHPMQ-> MANTARAY経由のPHPを使用したJMS
1.セマフォ
セマフォは、実際にはセマフォ、共有メモリ、プロセス間メッセージング(IPC)を含む3つの拡張機能で構成されるPHPモジュールです。 このモジュールはSystem V IPC関数ファミリーのシェルを提供します
--enable-sysvsem
使用するには、デフォルトで有効になっていないため有効にする必要があります。そのため、
--enable-sysvsem
オプションを使用してSystem V PHPセマフォのサポートを有効にします。 System V共有メモリサポートを有効にするには、
--enable-sysvshm
を使用してPHPをコンパイルし
--enable-sysvshm
。 System Vメッセージのサポートを有効にするには、--enable
--enable-sysvmsg
を使用してPHPをコンパイルし
--enable-sysvmsg
。
*注:セマフォは、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 ]]] )
desiredmsgtypeで指定されたタイプの指定されたキューから最初のメッセージを受信します。 - msg_remove_queue:メッセージキューを破棄します。
bool msg_remove_queue ( resource $queue )
キューで指定されたメッセージキューを破棄します。 この関数は、すべてのプロセスがメッセージキューの処理を終了し、システムリソースを解放する必要がある場合にのみ使用する必要があります。 - msg_send:メッセージをメッセージキューに送信します。
bool msg_send ( resource $queue , int $msgtype , mixed $message [, bool $serialize = true [,bool $blocking = true [, int &$errorcode ]]] )
タイプMsgType(0より大きくなければならない)のメッセージを、キューで指定されたメッセージキューに送信します。 - 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 )
キューで指定されたメッセージキューのメタデータを返します
2.ギアマン
Gearmanは、複数のプロセスで動作するように設計されたアプリケーションフレームワークであり、プログラムがタスクを並行して実行し、言語間で関数を呼び出すことができます。 Gearmanは、高可用性Webサイトからデータベース複製イベントの送信まで、さまざまなアプリケーションで使用でき、ジョブサーバーとクライアント/ワーカーAPIの2つの主要コンポーネントで構成されています。 クライアントおよびワーカーAPIはさまざまな言語で使用できますが、ジョブサーバーはCライブラリまたはPerlライブラリとしてのみ使用できます。 この事実により、主に他のライブラリへの依存関係が未解決であるため、Windowsでサーバーを実行することが難しくなります。
Gearmanアプリケーションプラットフォームは、次の2つの方法でインストールできます。
- Net_Gearmanという純粋なPHPラッパーを使用し、
pear install Net_Gearman
を使用します。 - 専用のPHP拡張。 [
] 。 この拡張機能は、Gearmanクライアントおよびワーカーを作成するためのOOPインターフェイスを提供します。
3. Quercusを介したPHPを使用したJMS
おそらくご存知のように、 JMSの機能のほとんどはメッセンジャーサービス用であり、Javaの世界では非常に適していますが、PHPには適していません。 これらの関数をPHPで使用するには、さまざまなテクノロジー(この場合はQuercus)を使用してJavaを実装する必要があります。
Java Message Service(JMS)は、Java Enterprise Edition(Java EE)ベースのアプリケーションコンポーネントがメッセージを作成、送信、受信、および読み取りできるようにするメッセージング標準です。 データ交換は、非同期(JMSプロバイダーがメッセージを到着時にクライアントに配信できます。クライアントはメッセージを受信するためにメッセージを要求する必要はありません)または信頼性(JMS APIはメッセージがすぐに1回だけ配信されることを保証できます)メッセージをスキップしたり、重複したメッセージを受信したりできるアプリケーションで利用できます)。
Quercusは、Java Caucho TechnologyによるPHP 5の100%実装であり、オープンソースGPLでリリースされています。 Quercusには、PDF、PDO、MySQL、JSONなどの多くのPHPモジュールと拡張機能が付属しており、JavaサービスとPHPスクリプトを緊密に統合しているため、JMSでPHPを使用すると非常に便利です。 Quercusは、Javaメッセージングサービスを使用した便利なメッセージングインターフェイスも提供するため、このセクションで後述するように、Resin JMS実装またはJMSを実装する他のメッセージングサービスを使用してメッセージを送受信できます。 Quercusをインストールして使用するには、2つのオプションがあります。
Resin Webサーバー
Quercusは、 Resin Application Serverの一部です

QuercusでJMSを使用するには、PHPとJAVA用にJMSを構成します。これには、 ConnectionFactoryとQueueをインストールする必要があります。どちらもWEB-INFディレクトリのresin-web.xmlファイルにあります。
非表示のテキスト

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変数「メッセージ」をチェックし、設定されている場合、この変数の値をJMSキューに送信します。 メッセージ駆動型エンティティ(MDB)は、これらのメッセージを受信して書き込みます。 レコードはサーブレットによって表示されます。
NetBeans IDEおよびGlassFish
Quercusを使用する2番目の方法は、NetBeans IDEとGlassFishをサーバーとして使用することです。 NetBeansでQuercusを使用するには、次の手順を実行する必要があります。
- Quercus-4.0.39.war(http://quercus.caucho.com/)を解凍し、WEB-INF / libディレクトリのJARファイルをGLASSFISH_HOME / domains / domain / libにコピーします。
非表示のテキスト
- NetBeans IDEを使用して新しいWebアプリケーションプロジェクト「PHPexample」を作成し、サーバーとしてGlassFishを選択します。
非表示のテキスト
非表示のテキスト
非表示のテキスト[完了]をクリックすると、次の構造のフォルダーが作成されます。
非表示のテキスト
- WEB-INFディレクトリで、 web.xmlファイルを作成します (以前に作成されていない場合):File> New> Empty。 次のテキストを貼り付けて保存します。
web.xmlそこで、PHPからサーブレットを宣言しました。web.xml
<?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>
- メインプロジェクトPHPexampleで、コンテキストを使用してindex.phpというPHPファイルを作成します。
index.phpindex.php
<?php echo " !"; phpinfo(); ?>
このページは、ブラウザおよびいくつかのPHP設定オプションでHello World!を印刷します。 作成されたプロジェクトのディレクトリ構造は次のとおりです。
非表示のテキスト
「index.jsp」はJSPでの作業を開始するためのテンプレートファイルにすぎず、タスクとは関係がないことに注意してください。
- localhost :8080 / PHPexample / index.php /のGlassFishでPHPアプリケーションを実行すると、以下の出力が得られます。
非表示のテキスト
QuercusがサーバーとしてNetBeans IDEおよびGlassFishで実行されることを確認したら、JMSのすべての機能とQuercusに付属する他のすべての拡張機能を使用してみることができます。
4. PHPMQを介したPHPを使用したJMS
PHPMQは、PHP向けのオープンソースのピアツーピアメッセージングツールキットであり、PHP開発者は、配信や継続的なメッセージングを確保しながら、キューやトピックでメッセージを送受信するなどのJMS操作を実行できます。 これにより、いわゆるバックオフィスのデータにアクセスできるPHP開発者に新しい可能性が開かれます。これは、通常、アプリケーションサーバーと古いメッセージングソリューションでのみ利用できます。
PHPMQ(


PHPMQのインストール:
→MantaRayメッセージングバスをダウンロードしてインストールする
→MantaRayを構成してRMI APIを有効にし、RMIレジストリを作成します(MantaRayプロジェクトのRMI APIドキュメントを参照)
→スタンドアロンアプリケーションとしてMantarayを起動
→php.iniでPHP-Java拡張機能を有効にする-関連情報は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)
PHPMQメッセージングAPIには次の機能が含まれます。
- enqueue : $ queueName (string)という名前のメッセージをキューに送信します。 $ userId (文字列)は、メッセージバス上の識別子です。
enqueue($userId, $queueName, $message)
- dequeue :キューからテキストメッセージを返します$ queueName (string); $ userId (文字列)は、メッセージバス上の識別子です。
dequeue($userId, $queueName)
- getQueues :メッセージバスで使用可能なキューのリストを返します。
array getQueues()
- getTopics :メッセージバスで利用可能なトピックのリストを返します。
array getTopics()
- subscribe :トピック$ topicName (string)にリスナーを追加します。これは$ messagesToCash (number)個以下のメッセージを受信します。 $ userId (文字列)は、メッセージバス上の識別子です。
subscribe($userKey $topicName, $messagesToCash)
- publishMessage :トピック$ topicName (文字列)を持つテキスト$ msg (文字列)を持つメッセージを公開します。 $ userId (文字列)は、メッセージバス上の識別子です。
publishMessage($userKey, $topicName, $msg)
翻訳者から
翻訳の開始後、素材がHabrのレベルに達していないことが判明しました。 これが、だれもこの資料の恩恵を受けることを妨げないことを願っています。
いつものように、不正確な点はすべてHabr-mailに報告してください。