require "al_worker_ipc" require "al_worker_message" class CometServer < AlWorker def initialize2() @ipc = Ipc.new() @ipc.chmod = 0666 @ipc.run( self ) @msg = NumberedMessage.new() end ## # アイドルタスクで、ランダム時間でメッセージ(イベント)を発生させる # def idle_task() loop do sleep rand(10) @msg.send( {"time"=>Time.now.to_s} ) end end ## # クライアント(ブラウザ, JavaScript)からのリクエストを受け、 # メッセージ(イベント)の配列を返す。 # listen {"TID":n} # def ipc_a_listen( sock, param ) tid = param["TID"].to_i if tid > 0 # TIDが有効なら、キュー内TID以降のメッセージを返す。 # もしまだTID番が発生していなければ、ここでウェイトする。 ret = @msg.receive( tid ) else # TIDが無効なら、初期アクセスとみなして全メッセージを返す。 ret = @msg.queue.dup() end reply( sock, 200, "OK", ret ) end end server = CometServer.new( "comet_server" ) server.parse_option() server.daemon()