ColdFusion 10 では、WebSocket プロトコル用のメッセージングレイヤーを提供することで WebSocket を実装しました。これは、CFML と JavaScript を使用して制御できます。メッセージングレイヤーは、WebSocket を信頼性と拡張性のあるものにする機能を備えています。WebSocket を使用すると、株式、チャート作成、オンラインゲーム、ソーシャルネットワーク、様々な目的のダッシュボード、監視などを目的とするリアルタイムアプリケーションを開発できます。
ご存じのように、WebSocket 接続では標準的な HTTP ポート(80 と 443)を使用してデータパケットを送受信します。そのため、WebSocket はファイアウォールに邪魔されません。ほぼすべてのファイアウォール設定で、これらの HTTP ポートでのネットトラフィックが許可されるからです。したがって、HTML5 WebSocket を利用するために、新しいハードウェアをインストールしたり、内部ネットワークで新しいポートを開いたりする必要はありません。
ブラウザーと ColdFusion サーバーの間にプロキシサーバー、リバースプロキシサーバー、ファイアウォールがない場合は、サーバーとクライアントが両方とも WebSocket プロトコルに対応している限り、WebSocket 接続は問題なく機能します。ただし、サーバーとクライアントの間には直接的な接続がないのが普通です。ColdFusion 11 には、WebSocket 用のプロキシサポートが導入されました。ColdFusion WebSocket のリクエストをインターセプトして ColdFusion サーバーにリダイレクトできる(IIS および Apache Web Server 内で実行される)新しいプロキシモジュールがあります。
新機能
ColdFusion 11 は、次の新機能をサポートしています。
- プロキシのサポート - ColdFusion WebSocket を使用するためのプロキシサーバーの設定に対応しました。
- SSL のサポート – ColdFusion WebSocket 用に SSL を有効化できるようになりました。
- クラスターのサポート– ColdFusion WebSocket 用にクラスターのサポートを有効化できるようになりました。
ColdFusion WebSocket の使用
WebSocket のサポートは、前のバージョンの ColdFusion で導入されました。ColdFusion 11 では、新たに WebSocket プロキシがサポートされました。
WebSocket プロキシについては、次の使用場面を考慮してください。
- 場面 1:ファイアウォールを設定していない – WebSocket プロキシを使用できます。
- 場面 2:ファイアウォールを設定している – WebSocket プロキシを使用する必要があります。


場面1 - ビルトイン WebSocket サーバーの使用(ColdFusion 10)
詳しくは、https://learn.adobe.com/wiki/display/coldfusionen/Using+ColdFusion+WebSocket を参照してください。
以下も参照してください。
- ブラウザーとフォールバック
- ColdFusion と WebSocket
- WebSocket と従来の通信モデルの相違点
- WebSocket の通信モデル
- WebSocket とは
- WebSocket を使用したメッセージのブロードキャスト
- ポイントツーポイント通信での WebSocket の使用
- ColdFusion WebSocket のエラー処理
- ColdFusion Administrator を使用した WebSocket の設定
- ブラウザーの WebSocket サポート
場面 2 - WebSocket のプロキシサーバーの使用(ColdFusion 11)
ColdFusion 11 には、WebSocket 用のプロキシサポートが導入されました。ColdFusion WebSocket のリクエストをインターセプトして ColdFusion サーバーにリダイレクトできる(IIS および Apache Web Server 内で実行される)新しいプロキシモジュールがあります。
ColdFusion サーバーとともに使用できる外部サーバーを以下に示します。
- Windows 8 または Windows Server 2012 で実行されている IIS 8 以上
- Apache 2.2 以上
ColdFusion 用に WebSocket プロキシサーバーを簡単に設定するには、次の手順に従ってください。
手順 1 - 外部サーバーの設定
WebSocket プロキシの設定を開始する前に、WebSocket プロトコルをサポートする外部サーバーを設定する必要があります。
IIS の設定
IIS での WebSocket プロトコルの有効化については、このドキュメントを参照してください。
Apache サーバーの設定
設定は必要ありません。
手順 2 - WebSocket プロキシの有効化
ColdFusion Administrator を使用して、WebSocket プロキシポートをサーバーレベルで有効化する必要があります。次の手順に従ってください。
- ColdFusion Administrator ページにアクセスします。
- サーバーの設定/Web ソケットをクリックします。
- 「WebSocket サーバーを有効化」をクリックして、「WebSocket プロキシポートを使用」を選択します。


手順 3 - 外部サーバーの追加
wsconfig ツールを使用して、外部 Web サーバーコネクターと ColdFusion サーバーを設定する必要があります。
次のタスクを実行します。
- <CF_INSTALL_HOME>/cfusion/runtime/bin に移動します。
- wsconfig ツールを実行します。
- GUI で「追加」をクリックします。
- Web サーバードロップダウンフィールドで、外部サーバーを選択します。
- 設定ディレクトリフィールドで、外部サーバーの設定ディレクトリのパスを参照して選択します。
- 「OK」をクリックします。


- 外部サーバーが実行されていない場合は、サーバーを起動するよう求めるメッセージが表示されます。


- 「はい」をクリックして外部サーバーを起動します。
- 「終了」をクリックします。
手順 4 - WebSocket プロキシサーバーの設定
ColdFusion 11 では、WebSocket プロキシをすばやく設定できる新しい設定ツール、wsproxyconfig が導入されています。次のタスクを実行します。
- <CF_INSTALL_HOME>/cfusion/bin に移動します。
- wsproxyconfig ツールを実行します。
- GUI で「追加」をクリックします。
- Web サーバードロップダウンフィールドで、外部サーバーを選択します。
- 設定ディレクトリフィールドで、外部サーバーの設定ディレクトリのパスを参照して選択します。


- 「OK」をクリックします。
- 外部サーバーが実行されていない場合は、サーバーを起動するよう求めるメッセージが表示されます。


- プロキシ設定を確認します。


- 「閉じる」をクリックします。
設定 5 - プロキシ設定の検証
WebSocket プロキシを適切に設定したら、<CF_INSTALL_HOME>/config/wsproxy/1 に必要なプロキシファイルが作成されているかどうかを確認します。
<CF_INSTALL_HOME>/config/wsproxy/1 にある config.ini ファイルを手動で変更することもできます。
また、新しいアプリケーションである cfws も、外部サーバーのアプリケーションルートで利用できます。


<cfwebsocket> タグは新しい属性をサポートしています。
- secure – (オプション)セキュアポート(SSL)が(Web サービスの通信の目的で)WebSocket サーバー用に設定されている場合にのみ、すべての WebSocket 通信は自動的にセキュアチャネルを介して行われます。ただし、両方のポート(SSL と 非 SSL)が定義されているときに、セキュリティで保護された TCP ソケットを介して通信を設定する必要がある場合は、secure を true に設定する必要があります。デフォルトは false です。
ColdFusion 11 には、機能強化により、ノードのクラスターをまたぐメッセージのリアルタイムブロードキャストや、セキュア WebSocket 通信(WSS プロトコル)のための SSL のサポートなど、エンタープライズレベルの機能が追加されています。
クラスターのサポート
アプリケーションが様々なノード間で実行されており、メッセージを単一のノードにパブリッシュしているときに、同じメッセージをすべてのノード間でブロードキャストしたい場合に、この機能を使用できます。
例えば、Node1 に、「ストック」チャネルをサブスクライブしている 2 つのクライアント(C1 と C2)があるとします。同様に、Node2 の 2 つのクライアント(C4、C6)と Node3 の 2 つのクライアント(C8、C10)も「ストック」チャネルをサブスクライブしているとします。クライアント C1 がこの「ストック」チャネルでメッセージをパブリッシュするときに、単に C1 と C2 だけにメッセージを送信するのではなく、他のノード(C4、C6、C8、C10)のクライアントもこのメッセージを受信する必要があります。
この機能を使用する際に、クラスターを有効化することで、クラスターの様々なノード間でチャネルの全サブスクライバーにメッセージをパブリッシュできます。この機能を有効化するには、クラスターオプションを選択し、ノードを上位および下位に移動するイベントをブロードキャストするマルチキャストポートを定義します。
注意:クラスターのサポートは、スタンダード版では利用できません。 |
JavaScript 関数
次の JavaScript 関数が機能強化され、クラスター機能が自動的にサポートされるようになりました。
関数 |
引数 |
戻り型 |
publish |
("channelname", messageBody, {filterOptions} |
boolean |
getSubscriberCount |
(“channelname”) |
boolean |
invokeAndPublish |
("channelName", cfcName, cfcMethod, [function_parameter] ,{custom_options}) |
boolean |
publish
ColdFusion 10 では、この関数が導入され、フィルター条件に基づいて特定のチャネルにメッセージを送信できるようになりました。ColdFusion 11 では、この関数が機能強化され、デフォルトでクラスター内のすべてのノードにメッセージが送信されるようになりました。
Publish("channelname ", messageBody, {filterOptions}); |
getSubscriberCount
ColdFusion 10 では、この関数が導入され、フィルター条件に基づいて特定のチャネルからサブスクライバー数を取得できるようになりました。ColdFusion 11 では、この関数が機能強化され、デフォルトですべてのノードからサブスクライバー数が取得されるようになりました。
getSubscriberCount(“channelname”) |
invokeAndPublish
メッセージのパブリッシュと CFC の呼び出しを別々のスレッドで実行するには、この関数を使用します。
invokeandPublish("channelname ", cfcName, cfcMethod, [function_parameter] ,{custom_options}) |
ビルトイン ColdFusion 関数
クラスターのサポートをさらに強化するために、ColdFusion 11 では次のビルトイン関数の機能が強化されています。
WSPublish
クライアントからの入力なしに、サーバーからのメッセージのパブリッシュをトリガーします。複数のノードに接続されている全サブスクライバーにメッセージをブロードキャストしやすいように、「clustered」という新しいパラメーターが追加されました。
wsPublish(“channel name”, messageBody [clustered]) |
または
wsPublish(“channel name”, messageBody , {filterOptions},[cluster]) |
「clustered」パラメーターが定義されていない場合、デフォルト値はクラスターの <Enable/Disable> の設定に基づいて取得されます。
WSGetSubscribers
設定済みのすべてのノードからサブスクライバー情報を取得します。 設定済みのすべてのノードからサブスクライバー情報を取得できるように、「clustered」という新しいパラメーターが追加されました。
WSGetSubscribers("channel") |
または
WSGetSubscribers ("channlName" ,[clustered]); |
「clustered」パラメーターが定義されていない場合、デフォルト値はクラスターの <Enable/Disable> の設定に基づいて取得されます。
WSGetAllChannels
設定済みのすべてのノードからサブチャネル情報を取得します。 設定済みのすべてのノードからサブチャネル情報を取得できるように、「clustered」という新しいパラメーターが追加されました。
WSGetAllChannels ("channel", clustered) |
「clustered」パラメーターが定義されていない場合、デフォルト値はクラスターの <Enable/Disable> の設定に基づいて取得されます。
セキュア WebSocket 通信(SSL を介した WebSocket)
ColdFusion 11 では、WebSocket 画面(Administrator Console/ColdFusion Administrator/サーバーの設定/WebSocket)の機能が強化され、次のオプションが追加されました。
- SSL の有効化
- SSL ポート
- キーストアファイルの場所
- キーストアのパスワード
オプション |
説明 |
SSL の有効化 |
SSL を介して WebSocket を実行するために、Secure Sockets Layer(SSL)を有効化します。 |
キーストアファイルの場所 |
サーバーのファイルシステムにおけるキーストアの場所です。例えば、C:\OpenSSL\bin\keystore.jks です。 |
キーストアのパスワード |
キーストアのパスワードです。 |
SSL ポート |
デフォルトのポートは 8543 です。 |
Administrator ノードから WebSocket クラスターを有効化するには、サーバーの設定/Web ソケットを選択します。Web ソケット画面で、「Web ソケットクラスターを有効にする」チェックボックスをオンにし、マルチキャストポートの詳細を入力します。 マルチキャストポートフィールドに、デフォルトのマルチキャストポートである 45566 が表示されます。必要に応じてポートの詳細を変更します。クラスター内のすべてのノードでマルチキャストポート値が同じであることを確認してください。