next up previous contents
: TCP/IP でのセッションのスタート : Session Management : Control message (SMObject/TCPIP/Control)   目次

Notification from servers

OpenXM サーバは, 可能であるかぎり寡黙である. たとえばエラーをおこしても, エラーはサーバのエンジンスタックにつまれる だけであり, サーバはクライアントが pop_cmo メッセージをおくらない かぎり何も送信しない.

OpenXM はこの原則をやぶる例外的な方法を一つ用意している. コントロールサーバは, OX_NOTIFY ヘッダおよびそれにつづく OX_DATA パケットを送る ことができる. この機能は mathcap で禁止することも可能である.

この機能をどのように使うか例をあげて説明しよう. Asirox_plot サーバは, quit ボタンをもっている. quit ボタンがおされると canvas が消滅するが, エンジン自体は存在を つづける. この状態で描画命令がくると, エンジンスタックに, ``canvas does not exist'' というエラーがつまれる. エンジンがこのエラーが生じたことを緊急に知らせたいときに OX_NOTIFY を用いる.

ここで, OX_NOTIFY をおくるのは, コントロールプロセスで あることに注意しよう. したがってエンジンはなんらかの方法で, コントロールサーバに OX_NOTIFY をおくることを依頼しないといけない. この方法は, OS によりいろいろな方法が可能だか, たとえば, unix では ファイル /tmp/.ox_notify.pid に touch することでこれを 一つの実現することが可能である. ここで pid はエンジンのプロセス番号である. コントロールサーバはファイル /tmp/.ox_notify.pid が touch されたことを検出したら, クライアントに OX_NOTIFY パケットおよび OX_DATAcmo_null を送る. エンジンはファイルを用いてコントロールサーバに急を知らせる以外に, 共有メモリやシグナルを用いてしらせてもよい.



Nobuki Takayama 平成28年8月27日