ウェブサーバー

システム要件

ウェブサーバーは実際にFlexSimモデルを実行してグラフィックスをレンダリングするため、ウェブサーバーに関するシステム要件はFlexSim自体に関する推奨システム要件になります。加えて、ウェブサーバーは、グラフィックスやダッシュボードなどを圧縮してストリーム配信する必要もあるため、むしろ、FlexSimの通常の実行よりも処理が多くなります。それに加えて、複数のユーザーがログインして同時にモデルを実行できるため、それに応じて必要なシステムリソースが増加します。

仮想マシン上のFlexSimウェブサーバー

仮想マシンプラットフォームは、一般的に、特殊なハードウェアやソフトウェア構成を使用しない3Dグラフィックスアクセラレーションをサポートしていません。グラフィックスアクセラレーションのないシステムは、FlexSimの最小要件を満たしていません。VMプラットフォームは進化しており、一部の3Dワークロードを高速化できるようになりつつあります。お使いのプラットフォームの3Dアクセラレーション機能をチェックして、「OpenGLバージョンに関するFlexSimの最小グラフィックス要件」を満たしているかどうかを確認してください。

グラフィックスの高速化に関する高いハードウェア要件とニーズを考慮して、FlexSimでは、ウェブサーバーを仮想環境でテストしていません。FlexSimが正常に動作する仮想マシン環境を構築することは可能かもしれませんが、テストされていないVM固有の問題が発生する可能性があります。そのため、仮想マシン上でのFlexSimウェブサーバーの実行はお勧めできません。

概要と主要な概念

FlexSimのウェブサーバーは、クエリ駆動型マネージャーであり、FlexSimの通信インターフェイスです。Google Chrome、FireFox、Internet ExplorerなどのウェブブラウザーからFlexSimモデルを実行できます。

ウェブサーバーの専用インストーラーは、FlexSimアカウント内からダウンロードできます。

デスクトップショートカットを使用してFlexSim Serverを起動すると、コンピュータは次のようなウェブサイトのホストを開始します。

このウェブサイトにアクセスするには、「http://127.0.0.1/」のアドレスをブラウザーに入力します。ウェブサーバーは、FlexSimのプロジェクトディレクトリ(Documents / FlexSim 2017 Projectsなど)でモデルを探します。

FlexSimの新しいインスタンスを開始するには、実行するモデルを選択し、[新しいインスタンスの開始]をクリックします。FlexSimが起動してモデルが開くまで、[新しいインスタンスの開始]ボタンは使用できません。モデルが開くと、[実行中モデルインスタンス]のドロップダウンに、新しく作成されたインスタンスが設定されます。インスタンスを選択し、[インスタンスに接続]をクリックすると、モデル用に自動的に生成されたウェブインターフェイスが表示されます。テストモデルでは、3Dビューとダッシュボードが並べて表示されます。

表示されるインターフェイスは、モデルのインターフェイスと一致します。インターフェイスは、FlexSimのウィンドウと同じように並べ替えることができます。ウィンドウのタブをクリックアンドドラッグしてドッキングを解除するか、右クリックして[フロート]を選択します。ウィンドウタブを右クリックして[閉じる]を選択すると、ビューを閉じることもできます。ドッキングを解除すると、そのウィンドウをインターフェイスのあらゆる場所にドッキングできるオプションが表示されます。

3Dビュー

上部のコントロールを使用して、ブラウザーでモデルを制御できます。また、モデルで開いている3Dビューを操作することもできます。左クリックでパン、右クリックで回転、右から左へクリック、またはマウスホイールを使用してズームできます。タブレット端末やスマートフォンでは、パン、回転、ズームの追加ボタンが表示されます。

ダッシュボード

ダッシュボードもリアルタイムで表示されます。ダッシュボード統計ウィジェットの位置を変更したり、サイズを変更したりすることもできます。モデルのダッシュボードにテキストフィールド、テーブル、ボタンなどの入力ウィジェットが含まれている場合は、これらの要素を操作できます。

実験ツール/オプティマイザー

モデルに実験ツールがある場合は、実験を実行するための標準インターフェイスが生成されます。ウィンドウの上部にあるタブを使用して、モデルコントロール、実験ツール、オプティマイザー間を移動できます。実験変数、実行時間、最適化値などのパラメータを定義できます。

タブレットとスマートフォン

このサーバーにタブレットやスマートフォンなどの他のデバイスを接続する際、127.0.0.1のアドレスは機能しません。他のデバイスは、コンピュータと同じローカルエリアネットワークまたはワイヤレスローカルエリアネットワークに接続する必要があります。コンピュータのIPアドレスを確認する必要があります。IPアドレスを確認するには、[スタート]ボタンをクリックし、「cmd.exe」と入力すると黒色のコマンドプロンプトが開きます。「ipconfig」と入力し、Enterキーを押します。IPv4アドレスをURLとしてデバイスのブラウザーに入力します。

カスタムウェブインターフェイスを開発する

FlexSim ウェブサーバーを使用すると、ApacheやIISなどのウェブサーバーソフトウェアをインストールしなくても、簡単なテストウェブサーバーを起動できます。IISを使用してWebサーバーを展開する場合は、「FlexSimウェブサーバーとIISを使用する」を参照してください。FlexSimから提供されるクエリまたはモデルに含まれるユーザー定義のクエリを使用して、カスタムウェブサーバーアプリケーションを作成できます。クエリが返す内容を正確に取得するには、ブラウザーのURLバーにクエリを入力して、応答を表示します(例:127.0.0.1/webserver.dll?availablemodels)。

次のクエリを使用できます。URLバーに127.0.0.1/webserver.dllと入力して、このリストを表示することもできます。

一般

  • webserver.dll?availablemodelsは、createinstanceクエリを使用してサーバーで実行できるモデルのxmlリストを返します。
  • webserver.dll?allfilesは、サーバー上のmodelディレクトリにあるすべてのファイルのxmlリストを返します。
  • webserver.dll_configurationは、flexsim webserver configuration.txtファイルで指定されたすべてのパラメータのxmlリストを返します。
  • webserver.dll?uploadmodelは、この機能がflexsim webserver configuration.txtファイルで有効になっている場合、モデルをサーバーにアップロードします。index.html内のフォームなどのフォームは、モデル(またはExcelテーブルなどの別のファイル)をモデルディレクトリにアップロードします。
  • webserver.dll_deletemodel=my%20modelは、この機能がflexsim webserver configuration.txtファイルで有効になっている場合、サーバー上のモデルディレクトリからモデル(または別のファイル)を削除します。
  • webserver.dll_downloadfile=modeldata%2Ecsvは、この機能がflexsim webserver configuration.txtファイルで有効になっている場合、サーバー上のモデルディレクトリからファイルをダウンロードします。

インスタンス

  • webserver.dll?instancelistは、サーバー上で実行されているモデルとそのインスタンス番号のxmlリストを返します。これらは、queryinstanceとterminateinstanceのクエリの有効な可能性です。
  • webserver.dll?numinstancesは、他のユーザーを含むサーバー上で実行されているインスタンスの数を表すxml番号を返します。これは、複数のサーバーの負荷分散に使用できます。
  • webserver.dll?createinstance=my%20modelは、指定されたモデル(ここではmy model.fsm)を実行しているFlexSimのインスタンスを開始し、インスタンス番号を含む短いxml応答を返します。
  • webserver.dll?queryinstance=my%model&instancenum=1&...は、FlexSimのインスタンスを照会します。リクエストに応答する方法はFlexSimが決定します。これは、モデルとの通信の主な機能へのゲートウェイです。詳細については、「インスタンスクエリ」を参照してください。
  • webserver.dll?terminateinstance=my%model&instancenum=1は、サーバー上でmy model.fsmを実行しているFlexSimの最初のインスタンスを終了し、短いxml応答を返します。

ライブラリ

  • webserver.dll?getlibrariesは、サーバーのlibrariesディレクトリにあるファイルのリストを返します。

モジュール

  • webserver.dll?getmodulesは、サーバー上のmodulesディレクトリにあるファイルのリストを返します。

ジョブ

  • webserver.dll?submitjobは、JSON形式のジョブ記述を含むこのようなHTMLフォームのアクションです。応答は、getjobresultsクエリで使用するIDになります。
  • 
    			<form action="http://127.0.0.1/webserver.dll?submitjob" method="POST">
    				<input type="hidden" name="job" value='{"modelname":"my%20model","timeout":3600,"priority":5,"setupcommands":
    					[{"command":"settable=modelparameters","data":"values=[[\"firstParam\",0],[\"secondParam\",2],[\"thirdParam\",\"hello\"]]"},
    					{"command":"setrunspeed=100000000"},{"command":"setstoptime=86400"},{"command":"toolsnodefunction=setupscript"},{"command":"run"}],
    					"resultcommands":[{"command":"getnodedata=/Tools/TrackedVariables/WorkInProgress"},{"command":"getnodedata=/Tools/modeloutput"}]}'>
    				<input type="submit">
    			</form>
    			

    JSONオブジェクトには、サーバー上のモデルの名前である「modelname」フィールドが必要です。モデルの実行完了を待つ際の最大秒数である「timeout」フィールドを含めることができます。コマンドオブジェクトの配列である「setupcommands」フィールドが必要です。コマンドオブジェクトの配列である「resultcommands」フィールドが必要です。コマンドオブジェクトには、「command」フィールドが必要です。これは、 webserver.dll?queryinstance=my%20model&instancenum=1&id=1&...の後のqueryinstanceクエリの一部です。コマンドオブジェクトには、通常POSTリクエストからのデータを含むHTTPリクエストの本文である「data」フィールドも使用できます。コマンドオブジェクトには、通常「GET」または「POST」である「verb」フィールドも使用できます。

    ジョブは、サーバーがFlexSimのインスタンスをさらに作成できるようになるとすぐに実行されます。createinstanceクエリが作成され、その後にqueryinstance=my%20model&instancenum=1&defaultpageクエリが作成されます。これらの応答は無視されます。次に、各セットアップコマンドへの応答が保存され、queryinstance=my%20model&instancenum=1&id=1&getrunstateなどのクエリでモデルがポーリングされます。runstateが0のとき(モデルの実行が終了したとき)、結果コマンドへの応答が保存されます。JSON形式での実行の詳細は、getjobresultsクエリへの応答として送信できます。

  • webserver.dll?getjobquery=1は、queryinstance=my%20model&instancenum=1のようなJSON文字列を取得し、それをジョブマネージャーによって実行されるモデルとのやり取りに使用できます。ジョブに実行中のインスタンスがない場合(待機中または完了している場合など)は、インスタンスはすぐに通信できないため、空の文字列が返されます。ジョブマネージャーによって開始されたFlexSimのインスタンスと通信する場合、インスタンスはいつでもシャットダウンされる可能性があります。このため、ジョブマネージャーによって開始されたインスタンスは、instancelistクエリのリストには記載されません。
  • webserver.dll?getjobresults=1は、submitjobクエリで送信されたジョブのJSONサマリーを返します。
  • webserver.dll?getjobstatus=1は、submitjobクエリで送信されたジョブのジョブステータスのJSONサマリーを返します。これは、getjobresultsクエリの簡易版で、結果の詳細は含まれません。
  • webserver.dll?getjobqueuelengthは、ジョブキュー内のジョブの数を表すJSON番号を返します。
  • webserver.dll?canceljob=1は、submitjobクエリで送信されたジョブが不完全または待機している場合にジョブをキャンセルします。

インスタンスクエリ

インスタンスが作成されると、ウェブサーバーはクエリハンドラーを介してFlexSimと通信できます。これにより、FlexSimからデータを送受信できます。サーバーへのクエリリクエストは次の図のように処理されます。

デフォルトのクエリのリストは、MAIN:/project/exec/globals/serverinterface/queryhandlersで確認できます。これらをテンプレートとして使用すると、MODEL:/Tools/serverinterface/queryhandlersノードにサブノードを追加することで、独自のカスタムクエリハンドラーを作成できます。これらのクエリハンドラーノードは、flexscriptをトグルします。ノードの名前は、クエリによって渡された値に対応します。たとえば、webserver.dll?queryinstance=Test%20Model&instancenum=1&resetは、MAIN:/project/exec/globals/serverinterface/queryhandlers/resetにあるクエリハンドラーを実行します。追加の情報を渡す場合は、クエリにパラメータを追加できます。たとえば、webserver.dll?queryinstance=Test%20Model&instancenum=1&customquery=1&count=5のようになります。

モデルを照会するためのカスタム機能とカスタムクエリタイプは、MODEL:/Tools/serverinterface/sendreplyでflexscriptノードを作成することによって、モデル用に記述することもできます。クエリへの応答を送信するには、このノードがwebcommand(httpsendreply、replynode)を一度呼び出す必要があります。応答は、パラメータとして指定されたノード内のデータのタイプに応じて、さまざまな形式で送信されます。ノードに、http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.htmlで定義されているような構文的に正しいHTTP応答を含む文字列データがある場合はそのまま送信されるため、開発者は必要なタイプのHTTP応答を送信できるようになります。例として、MAIN:/project/exec/globals/serverinterface/sendreplyのコードを参照してください。このコードの例は必要に応じてコピーして編集できます。defaultPageとgetRunStateのクエリは、ジョブインターフェイスで使用されます。

デフォルトページ

モデルのデフォルトウェブページは、MAIN:/project/exec/globals/serverinterface/pagetemplates/defaultのツリーにあるテンプレートを使用して生成されます。これは、PHPの理念から発想を得たFlexSimのFlexScript HTML Preprocessor(FHP)を使用して生成されたページです。このページは標準的なhtmlコードですが、<?flexscriptタグを使用してhtmlから抜け出し、結果のhtmlを出力コンソールに出力するFlexScriptコードを実行してから、?>タグを使用して直接htmlに戻ることができます。

htmlをMODEL:/Tools/serverinterface/defaultpagetemplateで作成されたノードに配置することによって、デフォルトのhtmlページをオーバーライドすることもできます。これにより、モデルのデフォルトページが上書きされます。

モデル内に名前付きhtmlページを作成することもできます。対応するFHPコードを使用して、名前付きノードをMODEL:/Tools/serverinterface/pagetemplatesに配置するだけです。その後で、サーバーがHTTPリクエストURLに組み込まれたこれらのページを配信します。たとえば、「custom」という名前のページを作成するには、MODEL:/Tools/serverinterface/pagetemplates/customにノードを追加して、それに必要なFHPコードを付加します。その後で、次のようにページアドレスに「custom」を含めることによってそのページにアクセスできます。

http://localhost/webserver.dll?queryinstance=MyModel&instancenum=1&custom

FlexSimウェブサーバーとIISを使用する

IISがiisnodeモジュールを使用するように設定されている場合、IISはFlexSimのインスタンスを管理し、FlexSimのウェブサーバーインターフェイスとやり取りすることもできます。これには、IIS管理ツール、ASP.NET、IISのURL書き換えモジュールを持つIIS 7.xが必要です。

可視性、スレッド化、認証における3つの大きな違いを除いて、すべてのやり取りは同じである必要があります。

  1. IISはバックグラウンドで実行されるため、FlexSimインスタンスはサーバー上に表示されません。このため、問題をデバッグするのがより困難になります。
  2. IISは複数のスレッドを使用してリクエストに並行して応答するため、リクエストへの応答の順序は異なる場合があります。
  3. Windows認証が有効になっている場合(IISとflexsim webserver configuration.txtの両方で)は、モデルディレクトリのモデルへのアクセスを制限できます。ドメインコントローラによって定義されたusergroupに基づいて名前が付けられたディレクトリは制限されています。ユーザーは、属しているusergroupの名前の付いた制限付きディレクトリにのみアクセスできます。

Windowsメモリの割り当て

Windowsが非対話型プロセスに割り当てるメモリ量(デスクトップヒープサイズ)を制限するWindowsレジストリ設定があります。レジストリパスは次のとおりです。


		HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
		

このキーには、より多くのキーと値のペアを含む長い文字列の値があります。


		%SystemRoot%\system32\csrss.exe
		ObjectDirectory=\Windows
		SharedSection=1024,20480,512
		Windows=On
		SubSystemType=Windows
		ServerDll=basesrv,1
		ServerDll=winsrv:UserServerDllInitialization,3
		ServerDll=sxssrv,4
		ProfileControl=Off
		MaxRequestThreads=16
		

SharedSectionキーは、3番目のパラメータで、IISによって割り当てられるメモリ量を定義します。デフォルトでは512です。ウェブサーバーからFlexSimの複数のインスタンスを開く必要がある場合は、すべてのインスタンスが同時に使用するメモリの総量以上に、この数を増やす必要があります。この数値は、実行されているモデルのメモリ要件に応じて異なります。

変更を加えた後は、必ずコンピュータを再起動してください。

IISの設定

FlexSimを使用するには、IISにいくつかの追加設定が必要です。手順は以下のとおりです。

Windows Serverオペレーティングシステムと64ビットのオペレーティングシステムの場合は、さらに複雑になる場合があります。

  • Windows Server 2012の新規インストールからIISを構成する方法は次のとおりです。
    • [サーバーマネージャー]を開きます。
    • サーバーマネージャー]で[ダッシュボード]を選択し、[役割と機能の追加]をクリックします。
    • 役割と機能の追加]ウィザードの[開始する前に]ページで、[次へ]をクリックします。
    • インストールタイプの選択]ページで、役割ベースまたは機能ベースのインストールを選択し、[次へ]をクリックします。
    • 対象サーバーの選択]ページで、[サーバープールからサーバーを選択]を選択し、サーバーを選択して、[次へ]をクリックします。
    • サーバーの役割の選択]ページで[Web サーバー (IIS)]を選択し、[次へ]をクリックします。
    • 機能の選択]ページで、[次へ]をクリックします。
    • Web サーバーの役割(IIS)]ページで、[次へ]をクリックします。
    • 役割サービスの選択]ページで、デフォルトでインストールされている事前選択された役割サービスを確認し、[World Wide Web サービス]の[アプリケーション開発]ノードを展開し、[ASP.NET 4.5]を選択します。
    • インストールする機能の概要]ページで選択内容を確認し、[インストール]をクリックします。
    • ASP.NET 4.5に必要な機能を追加しますか?]ボックスで、[機能の追加]をクリックします。[次へ]をクリックします。
    • インストールオプションの確認]ページで、[インストール]をクリックします。
  • Windows 8の新規インストールからIISを構成する方法は次のとおりです。
    • Windows機能の有効化または無効化]ダイアログボックスで、[インターネットインフォメーションサービス]をクリックしてデフォルト機能をインストールします。
    • アプリケーション開発機能ノード(World Wide Web Services下)を展開し、[ASP.NET 4.5]をクリックして、ASP.NET対応の機能を追加します。

  • URL Rewriteをダウンロードしてインストールします。
  • iisnodeをダウンロードしてインストールします。
  • FlexSimがIISからアクセス可能なディレクトリにインストールされていることと、モデルがIISからアクセス可能なディレクトリにあること(C:\Users\...などではない)を確認します。
  • FlexSim Serverがインストールされていることを確認します。FlexSim ServerはFlexSimダウンロードページからダウンロードできます。
  • FlexSim ServerをIISの外で一度実行します。これにより、NPMを介していくつかの依存関係を構成できます。
  • flexsim webserver configuration.txt内のディレクトリにある%DOCUMENTS%または%PROGRAMFILES%のマクロを、ディレクトリの絶対パスに置き換えます。
  • FlexSim Serverディレクトリの内容をC:\inetpub\wwwrootにコピーします。
  • Flexsimプログラムディレクトリからflexsimwebフォルダ全体(内容だけでなく)をC:\inetpub\wwwrootにコピーします。
  • IISマネージャーのDefaultAppPoolの詳細設定に移動します。
    • 32ビットバージョンのFlexSimを実行している場合は、32ビットアプリケーションを有効にします(有効にしない場合は、このオプションをFALSEに設定します)。
    • アプリケーションプールIDをADMINISTRATORに変更します。これにより、多くのアクセス許可の問題を回避できます。

    • 一度に複数のサーバーインスタンスを実行しないようにするには、重複リサイクルを無効にします。
    • 標準時間間隔(分)を0に設定します。これにより、サーバープロセスの定期的なリサイクルが防止されます。

  • デフォルトのウェブサイトの下にあるURL Rewriteに移動します。これはIISマネージャーにあります。
    • サーバー変数を表示...]をクリックします。

    • 追加...]をクリックし、ポップアップに「HTTP_CONNECTION」と入力します。

IISでのWindows認証

[サイト/デフォルトのウェブサイト]で、[認証]をダブルクリックします。Windows認証を有効にします。