dango 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
|