dango 0.0.35 → 0.0.36
Sign up to get free protection for your applications and to get access to all the features.
@@ -57,6 +57,8 @@ class DangoClientFramework
|
|
57
57
|
|
58
58
|
@log_file = @connection_client_log_file
|
59
59
|
@log_level = @connection_client_log_level
|
60
|
+
@log_max_size = 1048576
|
61
|
+
@log_shift_age = 99
|
60
62
|
|
61
63
|
# loggerの準備
|
62
64
|
logger.debug("-------client initialize host=#{@connection_client_host} port=#{@connection_client_port}")
|
data/lib/dango/framework_base.rb
CHANGED
@@ -45,7 +45,7 @@ class Time
|
|
45
45
|
def self.now_to_s
|
46
46
|
# self.strftime("%Y-%m-%d %H:%M:%S")
|
47
47
|
now = self.now
|
48
|
-
now.strftime("%Y-%m-%
|
48
|
+
now.strftime("%Y-%m-%d %H:%M:%S.") << "%06d" % now.usec
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -53,6 +53,7 @@ end
|
|
53
53
|
class DangoFrameworkError < StandardError; end
|
54
54
|
class DangoFrameworkTimeoutError < DangoFrameworkError; end
|
55
55
|
class DangoFrameworkConnectionError < DangoFrameworkError; end
|
56
|
+
class DangoFrameworkDisconnectError < DangoFrameworkError; end
|
56
57
|
class DangoFrameworkReadNoDataError < DangoFrameworkError; end
|
57
58
|
class DangoFrameworkFlashPolicyError < DangoFrameworkError; end
|
58
59
|
class DangoFrameworkMonitorSecurityError < DangoFrameworkError; end
|
@@ -119,7 +120,7 @@ module DangoFrameworkModule
|
|
119
120
|
if @log_file != ""
|
120
121
|
log_dir = File.dirname(@log_file)
|
121
122
|
Dir.mkdir(log_dir) if !File.exist?(log_dir)
|
122
|
-
@dango_logger = Logger.new(@log_file)
|
123
|
+
@dango_logger = Logger.new(@log_file, @log_shift_age, @log_max_size)
|
123
124
|
@dango_logger.level = @log_level
|
124
125
|
def @dango_logger.format_message(severity, timestamp, msg, progname)
|
125
126
|
# "#{Time.now_to_s}:#{sprintf('%1.1s', severity)}:#{progname}:#{msg}\n"
|
@@ -148,7 +149,7 @@ module DangoFrameworkModule
|
|
148
149
|
rescue EOFError, IOError, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::ECONNABORTED
|
149
150
|
# 接続終了時の切断と思われるものはDangoFrameworkConnectionErrorにしない
|
150
151
|
#raise(DangoFrameworkError, "failed to read sock for EOF reached.\n#{error_message($!, 'u')}")
|
151
|
-
raise(
|
152
|
+
raise(DangoFrameworkDisconnectError, "failed to read sock for EOF reached (and so on). sock=#{sock.inspect} #{$!.class} toid=#{Thread.current.object_id}")
|
152
153
|
rescue
|
153
154
|
raise(DangoFrameworkConnectionError, "failed to read sock. sock=#{sock.inspect} toid=#{Thread.current.object_id}\n#{error_message($!, 'u')}")
|
154
155
|
end
|
@@ -168,7 +169,7 @@ module DangoFrameworkModule
|
|
168
169
|
## サイズとデータタイプを取得
|
169
170
|
dtype, size = size_str[0, 5].unpack("cN")
|
170
171
|
|
171
|
-
##
|
172
|
+
## データがない場合
|
172
173
|
if size == nil || size == 0
|
173
174
|
raise(DangoFrameworkConnectionError, "toid=#{Thread.current.object_id}:size=#{size}:size_str=#{size_str.inspect}")
|
174
175
|
end
|
@@ -82,6 +82,12 @@ class ServerMonitorAction
|
|
82
82
|
'send_count' => @parent.send_count, # 送信回数
|
83
83
|
'recv_fail_count' => @parent.recv_fail_count, # 受信失敗回数
|
84
84
|
'send_fail_count' => @parent.send_fail_count, # 送信失敗回数
|
85
|
+
|
86
|
+
'log_level' => @parent.log_level_str,
|
87
|
+
'log_file' => @parent.log_file,
|
88
|
+
'log_max_size' => @parent.log_max_size,
|
89
|
+
'log_shift_age' => @parent.log_shift_age,
|
90
|
+
|
85
91
|
# 'dummy' => "dummy "*1000, # ダミー情報
|
86
92
|
}
|
87
93
|
|
@@ -21,6 +21,12 @@ class DangoServerFramework
|
|
21
21
|
DefaultServerHost = 'localhost' # デフォルトのホスト名 # 接続制限ホスト "0.0.0.0"にすれば全接続オッケイ
|
22
22
|
DefaultMaxConnections = 10 # デフォルトの最大接続人数
|
23
23
|
|
24
|
+
DefaultLogFile = "log/dango_development.log"
|
25
|
+
DefaultLogLevel = Logger::INFO
|
26
|
+
DefaultLogMaxSize = 1048576
|
27
|
+
DefaultLogShiftAge = 99
|
28
|
+
DefaultGServerLogFile = ""
|
29
|
+
|
24
30
|
# ここから先は普通は変更しなくていいだろうというもの
|
25
31
|
SendReceiveSleepIntervalSec = 0.2 # データ送信時のタイムアウトチェック間隔秒
|
26
32
|
SendReceiveTimeoutDefaultSec = 5.0 # データ送受信時のデフォルトタイムアウト秒数
|
@@ -48,6 +54,14 @@ class DangoServerFramework
|
|
48
54
|
def disconnecting(sock)
|
49
55
|
@parent.disconnecting(sock)
|
50
56
|
end
|
57
|
+
|
58
|
+
def starting()
|
59
|
+
@parent.starting()
|
60
|
+
end
|
61
|
+
|
62
|
+
def stopping()
|
63
|
+
@parent.stopping()
|
64
|
+
end
|
51
65
|
end
|
52
66
|
|
53
67
|
def initialize(config)
|
@@ -58,6 +72,16 @@ class DangoServerFramework
|
|
58
72
|
|
59
73
|
# SIGINT の捕捉
|
60
74
|
Signal.trap(:INT) do
|
75
|
+
# サーバーを停止
|
76
|
+
if @gserver && !@gserver.stopped?
|
77
|
+
@gserver.shutdown
|
78
|
+
@gserver.stop
|
79
|
+
while(!@gserver.stopped?) do
|
80
|
+
sleep 1
|
81
|
+
debug_print("waiting... #{@gserver.stopped?} #{@gserver.connections}")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
61
85
|
puts "shutdown"
|
62
86
|
exit!
|
63
87
|
end
|
@@ -85,9 +109,9 @@ class DangoServerFramework
|
|
85
109
|
|
86
110
|
logger.info("===== server initialize =====") # loggerの準備
|
87
111
|
logger.info("Process.pid=#{Process.pid}")
|
88
|
-
logger.info("port=#{@
|
89
|
-
logger.info("host=#{@
|
90
|
-
logger.info("max_connections=#{@
|
112
|
+
logger.info("port=#{@server_port}")
|
113
|
+
logger.info("host=#{@server_host}")
|
114
|
+
logger.info("max_connections=#{@server_max_connections}")
|
91
115
|
|
92
116
|
open("tmp/pids/dango.pid", "wb"){|fh| fh.write Process.pid.to_s }
|
93
117
|
|
@@ -107,13 +131,15 @@ class DangoServerFramework
|
|
107
131
|
TCPSocket.do_not_reverse_lookup = true # 逆引きを行わない
|
108
132
|
# TCPSocket.do_not_reverse_lookup = false # 逆引きを行う
|
109
133
|
|
110
|
-
@gserver = DangoGServer.new(self, @
|
111
|
-
@connection_server_host,
|
112
|
-
@connection_server_max_connections)
|
134
|
+
@gserver = DangoGServer.new(self, @server_port, @server_host, @server_max_connections)
|
113
135
|
@gserver.audit = true # Turn logging on.
|
136
|
+
@gserver.debug = true # debug
|
137
|
+
|
138
|
+
if @gserver_log_file && @gserver_log_file != ""
|
139
|
+
gserver_log_fh = open(@gserver_log_file, "a")
|
140
|
+
@gserver.stdlog = gserver_log_fh
|
141
|
+
end
|
114
142
|
|
115
|
-
GC.enable
|
116
|
-
GC.start
|
117
143
|
GC.disable
|
118
144
|
|
119
145
|
begin
|
@@ -201,6 +227,20 @@ class DangoServerFramework
|
|
201
227
|
logger.info "disconnecting:port=#{port}"
|
202
228
|
end
|
203
229
|
|
230
|
+
# gserver開始処理
|
231
|
+
def starting()
|
232
|
+
msg = "#{self.class.to_s} #{@server_host}:#{@server_port}/#{@server_max_connections} start"
|
233
|
+
logger.warn msg
|
234
|
+
puts "[#{Time.now_to_s}] #{msg}"
|
235
|
+
end
|
236
|
+
|
237
|
+
# gserver終了処理
|
238
|
+
def stopping()
|
239
|
+
msg = "#{self.class.to_s} #{@server_host}:#{@server_port} stop"
|
240
|
+
logger.warn msg
|
241
|
+
puts "[#{Time.now_to_s}] #{msg}"
|
242
|
+
end
|
243
|
+
|
204
244
|
# gserverのserveメソッド:スレッド開始処理
|
205
245
|
def thread_main(sock)
|
206
246
|
logger.info "#{sock} is accepted. thread.current=#{Thread.current.object_id} "
|
@@ -294,12 +334,16 @@ class DangoServerFramework
|
|
294
334
|
logger.debug "Monitor Security Error #{sid} "
|
295
335
|
|
296
336
|
rescue DangoFrameworkReadNoDataError
|
337
|
+
@recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
|
297
338
|
logger.debug "read no data. maybe client closed. #{sid} "
|
298
339
|
|
299
340
|
rescue DangoFrameworkConnectionError
|
300
341
|
@recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
|
301
342
|
logger.debug "connection error. #{sid} \n#{error_message($!, 'u')}"
|
302
343
|
|
344
|
+
rescue DangoFrameworkDisconnectError
|
345
|
+
logger.debug "DangoFrameworkDisconnectError. #{sid} \n#{error_message($!, 'u')}"
|
346
|
+
|
303
347
|
rescue DangoFrameworkError
|
304
348
|
logger.debug "DangoFrameworkError. #{sid} \n#{error_message($!, 'u')}"
|
305
349
|
|
@@ -346,10 +390,14 @@ class DangoServerFramework
|
|
346
390
|
Thread.abort_on_exception = true if @server_debug
|
347
391
|
|
348
392
|
# 変数の初期設定
|
349
|
-
@
|
350
|
-
@
|
351
|
-
@
|
352
|
-
@log_file = @config['server']['log_file'] ||
|
393
|
+
@server_port = @config['network']['port'] || DefaultNetworkPort
|
394
|
+
@server_host = @config['server']['host'] || DefaultServerHost
|
395
|
+
@server_max_connections = @config['server']['max_connections'] || DefaultMaxConnections
|
396
|
+
@log_file = @config['server']['log_file'] || DefaultLogFile
|
397
|
+
@log_max_size = @config['server']['log_max_size'] || DefaultLogMaxSize
|
398
|
+
@log_shift_age = @config['server']['log_shift_age'] || DefaultLogShiftAge
|
399
|
+
@gserver_log_file = @config['server']['gserver_log_file'] || DefaultGServerLogFile
|
400
|
+
|
353
401
|
@policy_file_request = @config['server']['policy_file_request'] || true
|
354
402
|
@send_receive_sleep_interval_sec = @config['server']['send_receive_sleep_interval_sec'] || SendReceiveSleepIntervalSec
|
355
403
|
@send_receive_timeout_default_sec = @config['server']['send_receive_timeout_default_sec'] || SendReceiveTimeoutDefaultSec
|
@@ -359,7 +407,7 @@ class DangoServerFramework
|
|
359
407
|
@heart_beat_receive_wait_sec = @config['server']['heart_beat_receive_wait_sec'] || HeartBeatReceiveWaitSec
|
360
408
|
@gc_interval_sec = @config['server']['gc_interval_sec'] || GCIntervalSec
|
361
409
|
|
362
|
-
|
410
|
+
# ログレベルの設定
|
363
411
|
log_level_hash = {
|
364
412
|
"FATAL" => Logger::FATAL,
|
365
413
|
"ERROR" => Logger::ERROR,
|
@@ -367,10 +415,15 @@ class DangoServerFramework
|
|
367
415
|
"INFO" => Logger::INFO,
|
368
416
|
"DEBUG" => Logger::DEBUG,
|
369
417
|
}
|
370
|
-
|
371
|
-
|
418
|
+
log_level_hash.each do |str, const|
|
419
|
+
@log_level = const if str.downcase == @config['server']['log_level'].downcase
|
372
420
|
end
|
373
|
-
@log_level = @
|
421
|
+
@log_level = @log_level || DefaultLogLevel
|
422
|
+
|
423
|
+
log_level_hash.each do |str, const|
|
424
|
+
@log_level_str = str if const == @log_level
|
425
|
+
end
|
426
|
+
|
374
427
|
|
375
428
|
@start_time = Time.now # サーバー起動時間
|
376
429
|
@recv_count = 0 # 受信回数
|
@@ -380,6 +433,7 @@ class DangoServerFramework
|
|
380
433
|
end
|
381
434
|
|
382
435
|
attr_reader(:start_time, :recv_count, :send_count, :recv_fail_count, :send_fail_count)
|
436
|
+
attr_reader(:log_level_str, :log_file, :log_max_size, :log_shift_age)
|
383
437
|
|
384
438
|
def dango_server_init # 初期設定
|
385
439
|
end
|
data/lib/dango/version.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: dango
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.0.36
|
7
|
+
date: 2007-11-20 00:00:00 +09:00
|
8
8
|
summary: Realtime communications network framework for Ruby and Flash on Rails.
|
9
9
|
require_paths:
|
10
10
|
- lib
|