これは、実際のラプランダー(1つの 'p')についてではありません。 これは、LAppSマイクロサービスアプリケーションサーバーに関するものです。
興味があれば、猫をお願いします。
LAppSに関する最初の公開からわずか6日が経過しました 。 この6日間で、LAppSはバージョン0.6.2に更新され、いくつかの便利な機能を取得しました。
大きな変化
これで、着信WebSocketメッセージのキューに依存しないサービスを実行できます。 これらのサービスの呼び出し方法がよくわかりません。
スタンドアロン、分離、内部? これらのサービスの主なポイントは、それらが「リーディング」であるということです。 フローアプリケーションを定義します。 彼らは独立して外界との相互作用のルールを確立します。 LAppSのサービスは、以前はIOWorker I / Oをブロックしませんでしたが、WebSocket従属メッセージキューという1種類のサービスしかありませんでした。
例として、同様のサービスでLAppSを実行するHTTPサーバーコードの実行を提案したいと思います。 このために、 KeplerプロジェクトのXavante HTTPサーバーが使用されます(以下を参照)。
その他の機能
IOWorkersの構成に使用できる2つの新しいオプション
- max_connections -1つのIOWorkerとの接続数を制限します。 このオプションは以前は無効でした。
- auto_fragment-送信メッセージの自動断片化(メッセージは、プロトコルスタック全体のエンベロープのサイズを含む、Upper-Layer-Protocol Payload Ethernetフレームのサイズ〜1500バイトで断片化されます)。
アプリケーション(サービス)の場合、着信メッセージの最大長を制限するオプションを使用できます(デフォルトでは2 ^ 64または使用可能なメモリの制限)。
- 分離されたサービス用のnapモジュールが追加されました。 インターフェース:
- nap:new() - nap型のユーザーデータオブジェクトを返します
- nap:usleep(msecs) -マイクロ秒のスリープ方式。 msecsは正の整数です。
- nap:nsleep(nsecs) -ナノ秒のスリープ方式(私のマシンでは+ -10ns)。 nsecsは正の整数です。
- nap:sleep(sec)-2番目のスリープ方式。 secは正の整数です。
「Lapplanders」の下でXavanteを起動します
警告: xavanteサーバーは、SSLサポートのないHTTP 1.1サーバーです(つまり、トラフィックのバランスと暗号化のために、nginxまたはH2Oの形式のSSLフロントエンドが必要です)。 ここでは、フロントエンドのセットアップは考慮されていません。
これに必要なもの
- luarocks OSディストリビューションからインストールされます。
- LAppS-0.6.2をインストールしました。 (インストールオプションは、プロジェクトwikiで表示できます 。たとえば、準備済みのdebパッケージを使用するか、 Dockerファイルを使用してインストールします)
- xavanteプロジェクトWebサイトの 指示に従ってインストールされます(2ステップKarl!)
サービスコードhttp.lua
コードはxavante manualからコピーされ、LAppSサービスコードに貼り付けられます。
local xavante = require "xavante" local hfile = require "xavante.filehandler" local hredir = require "xavante.redirecthandler" http = {} http.__index = http http["init"]=function() webDir = "/tmp/test/"; end http["mustStop"]=function() return must_stop() end http["run"]=function() local simplerules = { { -- URI remapping example match = "^[^%./]*/$", with = hredir, params = {"index.html"} }, { match = ".", with = hfile, params = {baseDir = webDir} } } xavante.HTTP{ server = {host = "*", port = 80}, defaultHost = { rules = simplerules } } xavante.start(http.mustStop,1); end return http
LAppSを起動する前に
なぜなら xavanteの場合、htmlファイルのファイルシステムのルートを指定しましたlua webDir = "/tmp/test/";
、このディレクトリにindex.htmlを配置する必要があります
便利なものと快適なものを組み合わせて、 サンプルのclient.html(名前を変更)をcbor.js.ライブラリと一緒に(名前を変更)しましょう。
このクライアントは3つのサービスを使用します。
- echo_lapps -LAppSプロトコルの仕様に従って動作するエコーサーバー。
- time_broadcast -1秒のパルス
- broadcast_blob-送信されたメッセージの自動断片化のテスト用のブロードキャストブロブ(サイズは最大4k)(5秒のパルス)。
したがって、これらの4つのサービス( xavanteを含む)の構成ファイルを作成します。
{ "directories": { "applications": "apps", "app_conf_dir": "etc", "tmp": "tmp", "workdir": "workdir" }, "services": { "echo_lapps" : { "internal" : false, "request_target" : "/echo_lapps", "protocol" : "LAppS", "instances" : 3, "max_inbound_message_size" : 1024 }, "http": { "internal": true, "instances": 1 }, "time_broadcast": { "internal": true, "instances": 1 }, "broadcast_blob": { "internal": true, "instances": 1 } } }
設定(lapps.json)は、/ opt / lapps / etc / conf /に配置する必要があります。
debパッケージからLAppSをインストールした場合、デモアプリケーション自体をインストールする必要があります。 ソースからインストールした場合は、コマンドmak install-examplesを入力するだけです。
その後、Laplandersを起動します:/ opt / lapps / bin / lapps
デーモンモードで起動するには、-dオプションを追加できます。
ブラウザでhttp:// localhostを実行すると(インストールがlocalhostにあった場合)、アプリケーションの動作(CPDVなど)を確認できます。echo-rpsバーチャートの移動、時間通知、インスペクターを開くと、コンソールに表示されるblob 。
興味深い(またはそうでない)詳細
http.luaサービスコードでは、 must_stop()グローバル関数の呼び出しに注目できます。 LAppSがアプリケーションを停止したい場合、この関数はtrueを返します。 この関数は、初期化される前にすべての分離されたサービスに注入されます。
分離されたサービスのインターフェイスは簡素化されています。 これらはすべて同じLuaモジュールですが、それらで宣言する必要があるのは、 init()およびrun()の 2つのメソッドだけです。 それらの名前から明らかなように、最初のものは初期化コード、2番目はサービスの実行に使用されます。
私は計画があります:
- 「食いしん坊」Lapplanders「」-valgrindとgperftoolsを使用したメモリ消費とCPUの研究。
- "Railwayman"-STLのstd ::スレッドがLAppSで使用されないが、std :: mutexおよびstd :: atomicが使用される理由について。 以下は調査です。 ハブでLAppSの出版物が必要かどうか
また、LAppSの開発の支援も必要です。 最も単純な。 それをテストすることに興味のある人が必要であり、機能のリクエストが必要です。
原則として、 多くの計画がありますが、多分他の誰かが私には見えない何かから利益を得るでしょう。