>> Home
  + Past histories
  + Links

>> download

>> documents
  + Archtecrure Guide
  + Configuration
  + Tutorial
  + API Guide
  + Seasar Service

>> samples
  + Naval Battle
  + Chat

>> BBS
  + geoboard
    (旧掲示板)

>> Mail To Amoi
Home > documents > Architecture Guide
FlashMX用 汎用ソケットサーバのアーキテクチャ

サーバの起動 Starting server
サーバの起動時には、jp.wda.gpss.system.Mainの起動パラメータの第1引数として渡されたXML書式の初期化ファイルを読み込みます。
このファイルには、サーバのシステム情報や、Sockletの配備情報が記述されており、それらの情報を基にソケットサーバを初期化します。

さらに、このファイルの情報を基に、Sockletがこのサーバに配備されます。
Sockletとは? What's Socklet?
Sockletとは、クライアントソケットや、それから送られてくる情報を処理する小さなアプリケーションです。jp.wda.gpss.GeneralSockletから派生したクラスを使用します。また、サーバ起動時に、初期設定ファイルで指定されたSocklet配備名を以って起動・配備されます。
Sockletには、大きく二つの役割があります。

1) クライアントの管理
ソケットサーバに接続してきたクライアントは、そのサーバに配備されているSockletの内の一つに、必ず所属することになります。
Sockletの選択は、接続用初期コマンドで行なわれます。
Sockletの仕事の一つは、そのようにして接続してきた、自分に所属するクライアントを管理することです。
クライアントの管理として行なわれる仕事は、クライアントの接続時検査、メッセージの送信、クライアント属性の取得/設定の3つです。
それぞれに対応するメソッドがGeneralSockletクラスに存在します。
また、このSockletにクライアントを所属させる作業や、クライアントを切断する作業は、サーバが自動的に行ないますので、Socklet制作者が意識する必要はありません。

2) コマンドの解釈及びその処理
Sockletのもう一つの大きな役割は、クライアントから送られてくる"\0"終端の文字列を解釈し、そして、それを適切に処理することです。
この文字列のことを、GPSSではコマンドと呼びます。
コマンドの書式や処理内容は 、一切GPSSでは規定されていません。それぞれのSockletで自由にプロトコルを考えて、それを処理するルーチンを組み立ててください。
コマンドの処理は、GeneralSockletクラスのdoCommand(SocketProcessor, String)メソッドで行なわれます。派生クラスは、このメソッドをオーバーライドする必要があります。
Sockletの配備 Deploy Socklets
Sockletは、初期設定ファイルで指定される「配備名」を以って配備されます。つまり、同じクラスを使用するSockletであっても、配備名さえ違っていれば、複数配備することが出来る、と言うことです。
また、配備時には「初期化パラメータ」を設定することが出来ます。配備されるSockletについての初期化情報は、この初期化パラメータを使用して、Sockletに渡してください。設定された初期化パラメータは、GeneralSocklet#getInitParam(String) / getInitParams(String) / getInitParams() で取得することが出来ます。
接続用初期コマンド Initial Connection Commands
サーバに接続したいクライアントは、まず始めに「接続用初期コマンド」をサーバに送信する必要があります。
特に初期化コマンドを送信していないつもりでも、クライアントから送信されてくる一番初めのコマンドは、接続用初期コマンドとして扱われますので、注意してください。
GPSS本体で規定されるプロトコルらしいプロトコルは、これだけです。

接続用初期コマンドは":"区切りで記述し、書式は以下の通りです。
所属したいSockletの配備名:ユーザー名:パスワード:初期化パラメータ
ユーザー名、パスワード及び初期化パラメータは省略できます。
配備されていないアプリケーション配備名が指定された場合は、既定のSockletが使用されます。

初期化パラメータは複数指定することが出来ます。
初期化パラメータは"&"区切りで記述し、書式は以下の通りです。
パラメータ名=値&パラメータ名=値&...
同じ名前の初期化パラメータを複数指定することも出来ます。

接続用初期コマンドの例を示します。
すべての要素を指定したコマンドの例です。
「YChat」と言う配備名のSockletに、ユーザー「amoi」がパスワード「amoinopass」でログインしたい場合です。
YChat:amoi:amoinopass:room=osyaberi&charactor=mona

Socklet配備名のみの指定も出来ます。
YChat
この項の頭に「注意してください」と書いた所以です。どんなコマンドを送ったとしても、(例え「:」が含まれていなかったとしても、)接続用初期コマンドとしてみなすことが出来ます。
サーバの処理内容 Server Sequence
サーバの起動処理、及びクライアントからの接続があった場合の処理動作をシーケンス図で示します。


(クリックすると拡大します。)