Apache + mod_rubyでCometチャットを実装する話です。


書き込みがあったら待機しているプロセスにSIGUSR1シグナルを送り、
待機しているプロセスはシグナルを受信次第、
クライアントに書き込まれたメッセージをを送るしくみになっています。

現在こんな感じで書いてありますが、別プロセスからProcess.killを実行しても
SignalExceptionを補足せず、500エラーを返してしまいます。

<何か処理>
begin
<何か処理>
sleep(30);
<シグナルがこなかった場合の処理>
rescue SignalException
<シグナルがきた場合の処理>
end

普通にシェル上から実行する分にはうまくいくのですが、mod_ruby上での制限などが
あるのでしょうか?

ほかにSignal.trapでシグナルを補足する方法もありますが、
これで処理をしても、結局sleep(30)が終わるまで待たされるようです。
(CGIで動くkochaというスクリプトでは補足した時にexit()をする事で
 回避していますが、mod_rubyではこの手は使えません。)

どうすればシグナルを補足できますか?あるいは、そもそも無理ですか?
その場合、mod_rubyのみでほかにcometを実装する方法はあるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/08/03 01:35:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答0件)

回答はまだありません

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません