WebSocketServer
WebSocketServer
クラスを使って、4D で WebSocketサーバーを作成および設定することができます。 4D WebSocketサーバーがアクティブになる と、WebSocketConnection
クラス を使用して 4D とクライアント間で WebSocket 接続を開き、使用することができます。
履歴
リリース | 内容 |
---|---|
20 | 追加 |
WebSocketプロトコルは、WebSocketサーバーとクライアント (Webブラウザーなど) の間の双方向通信のチャンネルを提供します。 WebSocketサーバーの詳細については、Wikipedia のページ を参照ください。
4D WebSocketサーバーについては、こちらのブログ記事 も参照ください。
要件
4D で WebSocketサーバーを作成し、扱うには、4Dビルトインクラスを 2つ使用する必要があります。
- このクラス (
4D.WebSocketServer
) は、サーバー自体を管理するためのものです。 4D.WebSocketConnection
クラスを使用して、接続とメッセージを管理します。
さらに、2つのユーザークラスを作成し、コールバック関数を定義する必要があります:
- サーバー接続を処理するためのユーザークラス
- メッセージを処理するためのユーザークラス
接続を維持するため、WebSocketサーバーの作成 は ワーカー 内にておこなう必要があります。
4D Webサーバー を起動しておく必要があります。
例題
この基本的な例では、WebSocketサーバーはメッセージを大文字で返します。
- ワーカーを使用して (必須) WebSocketサーバーを作成し、サーバー接続処理用のユーザークラスをパラメーターとして渡します。
// ユーザークラスのインスタンスを作成します
// これが、サーバーへの接続を処理します
var $handler:cs.myServerHandler
$handler:=cs.myServerHandler.new()
CALL WORKER("WebSocketServer"; Formula(wss:=4D.WebSocketServer.new($handler)))
// WebSocket を変数 (wss) に代入しておくことで
// あとで wss.terminate() の呼び出しが可能になります
- サーバーへの接続を処理するためのコールバック関数を含む
myServerHandler
ユーザークラスを定義します:
// myServerHandler クラス
Function onConnection($wss : Object; $event : Object) : Object
// ユーザークラスのインスタンスを返します
// このインスタンスがサーバーへの接続を処理します
return cs.myConnectionHandler.new()
- メッセージを処理するためのコールバック関数を含む
myConnectionHandler
ユーザークラスを定義します:
// myConnectionHandler クラス
Function onMessage($ws : 4D.WebSocketConnection; $message : Object)
// メッセージを大文字に変えて送信します
$ws.send(Uppercase($message.data))
WebSocket 接続を処理するクライアントサイドの Javascriptコードの例については、このブログの記事 を参照ください。
WebSocketServer オブジェクト
WebSocketサーバーオブジェクトは、以下のプロパティと機能を提供します:
.connections : Collection WebSocketサーバーが処理しているカレントの接続をすべて格納します |
.dataType : Text 受信または 送信されるデータの型 |
.handler : Object WebSocketサーバーの開始に使用された WSSHandler オブジェクトを取得するアクセサーです |
.path : Text WebSocketサーバーにアクセスするためのパスのパターンです |
.terminate() WebSocketサーバーを終了します |
.terminated : Boolean WebSocketサーバーが終了している場合には true です |
4D.WebSocketServer.new()
4D.WebSocketServer.new( WSSHandler : Object { ; options : Object } ) : 4D.WebSocketServer
引数 | タイプ | 説明 | |
---|---|---|---|
WSSHandler | Object | -> | WebSocketサーバー用コールバックを宣言しているユーザークラスのオブジェクト |
options | Object | -> | WebSocket の設定パラメーター |
戻り値 | 4D.WebSocketServer | <- | 新しい WebSocketServer オブジェクト |
4D.WebSocketServer.new()
関数は、指定した WSSHandler コールバックと、options の設定 (任意) を使用して WebSocketサーバーを作成および起動し、4D.WebSocketServer
オブジェクトを返します。
この関数を呼び出すには、4D Webサーバー が起動されている必要があります。 WebSocketサーバーの ホスト と ポート は、4D Webサーバーのホストとポートと同じです。
WSSHandler 引数
WSSHandler 引数には、WebSocketサーバーでイベント (主に接続イベント) が発生するたびに呼び出されるユーザークラスのインスタンスを渡します。 このクラスでは、以下のコールバック関数を定義します (onConnection
のみ必須):
プロパティ | タイプ | 説明 | デフォルト |
---|---|---|---|
onConnection | Function | (必須) 新規クライアント接続が開始した時のコールバック (後述参照) | undefined |
onOpen | Function | WebSocketサーバーが起動した時のコールバック (後述参照) | undefined |
onTerminate | Function | WebSocketサーバーが終了した時のコールバック (後述参照) | undefined |
onError | Function | エラーが発生した時のコールバック (後述参照) | undefined |
WSHandler.onConnection(WSServer : Object ; event : Object) : Object | null
引数 | タイプ | 説明 | ||
---|---|---|---|---|
WSServer | 4D.WebSocketServer | <- | カレントの WebSocketサーバーオブジェクト | |
event | Object | <- | 引数 | |
type | Text | "connection" | ||
request | Object | request オブジェクト。 接続要求に関する情報を格納します (後述参照) | ||
戻り値 | Object | -> | connectionHandler オブジェクト (後述参照)。 この関数が connectionHandler オブジェクトを返す場合、4D.WebSocketConnection オブジェクト が自動的に作成され、カレント接続のコレクション に追加されます。 その後、このオブジェクトは connectionHandler オブジェクトの各関数に引数として受け取られます。 戻り値が null または undefined の場合、接続は解除されます。 |
このコールバックは、ハンドシェイクが完了したときに呼び出 されます。 WebSocket 接続を作成するためには、有効な connectionHandler
オブジェクト を指定して呼び出す必要があり、そうでない場合は接続がキャンセルされます。
WSHandler.onOpen(WSServer : Object ; event : Object)
引数 | タイプ | 説明 | ||
---|---|---|---|---|
WSServer | 4D.WebSocketServer | <- | カレントの WebSocketサーバーオブジェクト | |
event | Object | <- | 引数 | |
type | Text | "open" |
WebSocketサーバーが起動したときに発生するイベントです。
WSHandler.onTerminate(WSServer : Object ; event : Object)
引数 | タイプ | 説明 | ||
---|---|---|---|---|
WSServer | 4D.WebSocketServer | <- | カレントの WebSocketサーバーオブジェクト | |
event | Object | <- | 引数 | |
type | Text | "terminate" |
HTTPサーバーまたは WebSocketサーバーが終了したときに発生するイベントです。
WSHandler.onError(WSServer : Object ; event : Object)
引数 |
---|