require "al_worker_ipc" require "al_worker_message" class SsevServer < 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)からのリクエストを受け、 # メッセージ(イベント)をServerSentEventsプロトコルで返す。 # def ipc_a_listen_ssev( sock, param ) tid = param["LAST_EVENT_ID"] == 0 ? @msg.tid : param["LAST_EVENT_ID"] @msg.cycle( tid + 1 ) { |m| sock.puts "id: #{m[:TID].to_i}" sock.puts "data: #{m['time']}" sock.puts "" } end end server = SsevServer.new( "ssev_server" ) server.parse_option() server.daemon()