Harcon -Radiation -HarconおよびJSONRPCメッセージ形式を使用して、RESTおよび/またはWebSocketを介してサービスを自動的に公開するハーコンライブラリの拡張。
=============== = Harcon-Radiationは、Harconライブラリを拡張して、休憩とWebsocketベースのインターフェイスを提供する小さなツールです。構成に続いて、エンティティ内のサービスは、REST / WebSocketを介して自動的に公開されます。
オブジェクトベースのエンティティを公開または取り消すたびに、ハーコン放射は変更に反応し、インターフェイスを透過的に維持します。
!注:バージョン8.0.0から、HarconはノードV8のみをサポートし、機能を待っています。コールバックベースのバージョンには、V7以下を使用してください。
$ npmハーコン放射線をインストールします
let serverconfig = {} let harconconfig = {} lead radiationconfig = {} let server = require( 'harcon-radiation/util/server')let server = new server({name: 'king'、server:serverconfig、harcon、harcon :harconconfig、radiation:radiationconfig})await server.init()
この例は、サーバーインスタンスを簡単に作成する方法を示しています。サーバーは、WebSocketサポートを提供するFASTIFY-WSなどのいくつかの組み込みプラグインを使用したFASTIFYインスタンスです。サーバーは、ハーコンとハーコン放射と構成を開始します。
主なアイデアは、アクションを必要とせずに、これらの休憩および /またはWebsocketインターフェイスを介して「REST」と「WebSocket」を所有するHarconに公開されたオブジェクトベースのエンティティを公開することです。
デフォルトの動作は、すべてのユーザー定義サービスを公開することです。ただし、例外を作成するルールを定義できます。オプションを設定することにより、 hideinnerservicesを設定すると、ハーコン放射は内部サービスを隠し、公開しません
var radiationconfig = {...、hideinnerservices:true}
ハーコン放射線は、2つの方法で構成できます。
プレフィックス文字列を定義します
var radiationconfig = {...、hideinnerservices:true、innerservicesprefix: '_'})
関数の名前を評価する関数を定義するには
var radiationconfig = {...、hideinnerservices:true、innerservicesfn:function(name){return name.startswith( 'inner')|| name.startswith( 'sys')}})
Openapi仕様
休息を通じてサービスを公開する3つの方法があります。
RESTFUL:各サービスは、部門、コンテキスト/エンティティ、およびサービスの名前に応じて、異なるURIに公開されます。一般的なURIパターンは/{division}/{entity}/{event}です。もちろん、各部分は、ハーコンオーケストレーションに応じて適格な名前にすることができます。
JSON-RPC 2.0:仕様が定義されているように、JSON-RPC 2.0コールを認める1つのURI。
Harcon RPC:Harcon JSONメッセージを受け入れる1つのURI
デフォルトでは、オプション3はアクティブで、オプション1と2はパッシブです。
次の設定では、URI '/HarconのHarcon-RPCオプションをアクティブにします。
var radiationconfig = {...、{rest:{ingorerestpattern:false}})
Restful Interfaceは、投稿のみメッセージのみを受け入れます。露出したサービスに対処するには、パターン/{division}/{entity}/{event}に従ってURIを作成する必要があります。例えば:
post -> 'http://localhost:8080/Harcon/book/log'
の体で
{ params: [ 'Hello!'] }
部門「ハーコン」のコンポーネント「本」のサービス「ログ」に対処します。エンティティの答えはJSONとして送り返されます。
Harcon-Radiationは、次のようにInstaceを作成する場合、JSON-RPC 2.0をサポートします。
var radiationconfig = {...、rest:{jsonrpcpath: '/rpctwo'})
これにより、JSON-RPC 2.0標準を尊重するパス'/rpctwo' 'の郵送リクエストを受け入れます。
注:JSON-RPCの制限に注意してください。部門やコンテキストなどのオーケストレーションをサポートしていないため、アドレス指定はentityName.Serviceに限定される必要があります。
次の設定では、URI '/HarconのHarcon-RPCオプションをアクティブにします。
var radiationconfig = {...、{rest:{harconrpcpath: '/harcon'}})
次のJSONを住所に送信することにより、部門「キング」のエンティティ「マリー」のメソッド「ターミナル」に対処できます。
{部門:「King.Charming」、イベント:「Marie.terminus '、params:['Szióka! ']}
ハーコンメッセージJSONスキーマ
WebSocketsの使用も簡単です。次の構成は、Harcon JSONメッセージを受け入れるインターフェイスをアクティブにします。
var radiationconfig = {...、{websocket:{harconpath: '/socket'}})
そのインターフェイスにパケットを送信します:
const websocket = require( 'ws')socketclient = new websocket( 'ws:// localhost:8080/kingsocket')... socketclient.send(json.stringify({id:mid、division: 'king'、event: 'Greet.simple'、パラメーター:['Bonjour!'、 'Salut!'])socketclient.on( 'message'、function(data) .error(new error(data.error))if(data.id === mid)console.log(data.Result)}))))
これにより、Division KingでSimple of the Entity Greetを実行するサービスを実行するサーバーにJSONメッセージが送信されます。応答は返送されます。注:着信回答パケットを区別するために、IDを渡すことを強くお勧めします。
次の構成は、JSON RPC 2.0 JSONメッセージを受け入れるインターフェイスをアクティブにします。
var radiationconfig = {...、{websocket:{jsonrpcpath: '/jsonsocket'}})
そのインターフェイスにパケットを送信します:
socketjsonrpcclient.send(json.stringify({jsonrpc: '2.0'、id:mid、division: 'king'、method: 'julie.wakeup'、params:[]}))socketjsonrpcclient.on( 'message'、function( data){data = json.parse(data)if(data.error)console.error(new error(data.error))if(data.id === mid)console.log(data.Result)}))
あなたのビジネスエンティティがメソッドを「シフト」と呼ぶ場合、接続されたリスナーにメッセージを送信 /ブロードキャストすることができます。これは、ハーコンの組み込みサービスであり、エンティティに州の変更について知らせることができます。 Harcon-Radiationは、このメカニズムを使用して、構成されている場合にこれらのメッセージをWebSocketリスナーに送信します。
katie = {name: 'katie'、context: 'morning'、dobusiness:async function(){waing this.shifted({mood: 'pour toi、marie'})return 'ok}}}
これにより、 「TOI、Marie」というデータを使用して、接続されたクライアントに「Mood」というメッセージが送信されます。 「シフトされた」関数に渡されたオブジェクトのすべてのプロパティは、ブロードキャストされる個別のメッセージに変換されます。各メッセージのペイロードは、指定されたプロパティの値によって設定されます。
注:JSON-RPC 2.0の性質を考慮すると、このレベルのサービスでは、仕様の範囲を超えてメッセージ処理を実装する必要があります。
デフォルトでは、関数「Shifted」は、接続されたすべてのリスナーにメッセージを発します。一部のビジネスケースは、定義されたクライアントのグループをターゲットにして、より焦点を絞ったアプローチを望んでいます。 Harcon-Radiationを使用すると、2つのサービスを定義してクライアントをマークおよび選択できます。
構成ファイルは、次の関数を定義する場合があります。
assycocket:async function(event、項、res、socket){return 'ok'}
関数「割り当て」は、以下の例が示すように、現在のクライアントソケットをマークする機会を与える各メッセージ処理の最終ステップとして呼び出されます。
assyncocket:async function(event、項、res、socket){if(event === 'julie.login')socket.name = resreturn 'ok'}
メッセージ「Julie.Login」が正常に処理された場合、サービスの結果はソケット接続に関連付けられます。
州のシフトが変更されており、クライアントに通知する必要があります。関数識別ケットは次のように呼び出されます。
this.shifted({mood: 'pour toi、claire'}、 'claire')... dync function(sockets、target){let filtered = [] for(let socket of sockets)if(target === '*' ||。
関数IdentifySocketsは、ユーザーがコールした関数によって実行される内部関数ブロードキャストによって呼び出されます。 Funtion IdentifySocketsの役割は、クライアントを除外してメッセージを送信することです。デフォルトでは、すべての接続されたWebsocketクライアントに通知されます。
Harcon-Radiationを使用すると、システムを不要なアドレス指定または到達制限エリアから保護するために、構成ファイルのシールド関数を定義できます。
var harcon = new Harcon({ ...シールド:function(division、event){return false}})
その関数が「true」を返した場合、着信メッセージはエラーで拒否されるべきです:「メッセージがブロックされました」
Nimesisは、1つの単一のサービスを提供するハーコン放射の組み込みエンティティです。
模倣:function(entitydef){
Harcon Entityの定義を文字列として受け入れ、エンティティ定義に変換し、その構成に従って公開します。デフォルトでは、すべてのサービスはRESTおよびWebSocketsによっても公開されます。動的拡張機能またはフライでサービスを公開する能力が要件である場合によく機能します。ニメシスは、参照として1つの定義のみを保持します。新しい定義が収入すると、前の定義が破壊されます。
関数を「reshape」と呼ぶと、公開されているエンティティが削除されます。
注:この機能は特別な目的を果たしており、十分な注意を払って使用しています。
(MITライセンス)
Copyright(c)2018 Imre Fazekas
このソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを取得している人に、これにより許可が無料で許可され、制限なしにソフトウェアを扱うことができます。 、ソフトウェアのコピーを公開、配布、サブライセンス、および/または販売し、次の条件を条件として、ソフトウェアが提供される人を許可します。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたは使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。ソフトウェア。
https://github.com/imrefazekas/harcon-radiation/issuesを参照してください。