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の分岐点とメールのパッチに喜んでいます。

プロジェクト公式ページ

Source: https://habr.com/ru/post/J79189/


All Articles