Realplexor:PHPおよびJavascript(リアルタイム)用のAPIを備えた生産的なCometサーバー

Dklab Realplexorは、ユーザーブラウザーへの何十万ものオープンHTTP接続を同時に維持できるようにするCometサーバーです。 ブラウザーで実行されているJavaScriptコードは、1つ以上のRealplexorチャネルをサブスクライブし、着信データのハンドラーをハングさせます。 サーバーはいつでもこれらのチャネルの1つでメッセージを記録でき、サーバーの負荷を最小限に抑えながら、リアルタイムですべてのサブスクライバー(少なくとも1つ、少なくとも1000)に即座に送信されます。



Realplexorのイデオロギーのインスピレーションは前のプロジェクトであるdklab_multiplexorでしたが、Realplexorのコードは実際にはそれとは何の関係もありません。 そのため、名前を変更することにしました。 製品の機能も比較できません(以下を参照)。コードサイズは7倍になりました。



リアルタイムディレクションは現在、西側で非常に活発に開発されており、Pythonのイベント指向のWebサーバーであるTornado製品は特に際立っています。 確かに、トルネードは、Cometサーバーではなく、Cometサーバーを「含む」プログラムを作成できるツールです。 キーワード: Comet 、Push Server、Long polling、JavaScript、XMLHttpRequest。



Realplexorの主な利点:

一度見た方が良い...



別のオンラインサンドボックスを作成して、新しいRealplexorの機能とCometサーバーの一般的な用途を示しました(ちなみに、これは私の新しいスタートアップRutwitが使用するものと物理的に同じRealplexorデーモンです)。 サンドボックスは、マルチチャネルチャットのようなものを実装しています。入力すると、異なるコンピューターで実行されている2つの独立した「ブラウザ」のようになります。 デフォルトでは、Alpha、Beta、およびRuTvitという名前の3つのチャネルがページ上で開かれます。 しかし、もちろん、これらのチャネルを閉じて新しいチャネルを開くことができます。 たとえば、ここにHabrahabrという名前の唯一のオープンチャネルがあるページがあります: http ://rutvit.ru/realplexor/demo?ids=Habrahabr







サンドボックスは、次のRealplexor機能を示します。 以下は、このサンドボックスコードからの抜粋であり(組版に正確で、この記事に適合しています)、Realplexor APIの使用を示しています。



コードリスト1:サンドボックスコードからの興味深い抜粋:JavaScript

// Dklab_Realplexorクライアントを作成します。

var realplexor = new Dklab_Realplexor

" http://rpl.YourSite.com/"、// RealplexorのエンジンURL。 サブドメインである必要があります

"demo_" //名前空間

;



//コールバックをチャンネルアルファにサブスクライブします。

Realplexor。 subscribe "Alpha" function result id {

アラート 結果 ;

} ;



//コールバックをチャンネルベータに登録します。

Realplexor。 subscribe "Beta" function result id {

div innerHTML = result ;

} ;



//サブスクリプションを適用します。 コールバックは、データの到着時に非同期的に呼び出されます。

Realplexor。 実行 ;


コードリスト2:サンドボックスコードからの興味深い抜粋:PHP

// Realplexorサーバーにアクセスするための新しいAPIオブジェクトを作成します。

require_once "Dklab / Realplexor.php" ;

$ rpl = new Dklab_Realplexor "127.0.0.1" "10010" "demo_" ;

...

//チャネルにデータを送信します。

$ rpl- > send array "Alpha" "Beta" $ _POST [ 'message' ] ;


Realplexorをインストールする



dklab_realplexor.tar.gzをダウンロードしたら、自動実行Linuxサービスとしてインストールできます。
cd / opt

wget http: // github.com / DmitryKoterov / dklab_realplexor / tarball / master

tar zxf * realplexor * .tar.gz

mv * realplexor * / dklab_realplexor



#次に、init-scriptを処理します。

ln -s / opt / dklab_realplexor / dklab_realplexor.init / etc / init.d / dklab_realplexor

chkconfig-dklab_realplexorを追加

chkconfig dklab_realplexor on

サービスdklab_realplexor start


RutwitでRealplexorを使用する方法



チャンネルのオンラインステータスのリアルタイム検索と追跡。 検索結果を表示すると、クエリに一致するツイートがリアルタイムで一番上に表示されます(GoogleやBingのtwitter検索、FriendFeedなど)。 この機能を提供するには、サーバーは各時点で、PHP APIの対応する機能を提供する「アクティブ検索」に関する情報を持っている必要があります。



チャンネルを購読します。 ツイートフィード(サイト全体で独自の、 パブリックなど)を見ると、Realplexorチャネルが使用されます。 したがって、新しいツイートは、ページをリロードすることなく、すべてのユーザーに同時に表示されます。



一度に多くのチャンネルを購読します。 FriendFeedの表示モードでは、メッセージがブランチにグループ化されると、各ブランチは個別のRealplexorチャネルのサブスクリプションになります(つまり、ブラウザは1つの接続で数十、時には数百のチャネルに同時にサブスクライブされます)。 複数のサブスクリプションは、Realplexorの主要な機能です。たとえば、Like / Like(またはリツイート)、プライベートメッセージなど、それを介して実装されます。



一度に複数のチャネルにメッセージを送信します。 ユーザーがツイートすると、メッセージは自分の個人チャンネル、すべての友達のホームチャンネル、および1つのRealplexorリクエストのパブリックチャンネルに同時に送信されます。



任意の構造のメッセージの転送。 RutvitaのPHPスクリプトは、ネストされた連想配列の形式でRealplexorメッセージを生成します。これは、ブラウザー側で透過的にJavaScriptオブジェクトに変換されます。



次は?



APIの説明と例は、プロジェクトページにあります 。 開発者を招待して製品をテストします。 Realplexorを改善するためのコメントや提案に加えて、GitHubの分岐点とメールのパッチに喜んでいます。



プロジェクト公式ページ



All Articles