dango 0.4.5 → 0.4.6
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.
- data/lib/dango/server_framework.rb +58 -46
- data/lib/dango/shared/memory_store.rb +11 -11
- data/lib/dango/version.rb +1 -1
- metadata +2 -2
@@ -72,10 +72,12 @@ class DangoServerFramework
|
|
72
72
|
|
73
73
|
def exit_process() # プロセス終了処理
|
74
74
|
debug_print("shutdown")
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
75
|
+
if @is_pid_file_create
|
76
|
+
begin
|
77
|
+
File.delete(@pid_file)
|
78
|
+
rescue
|
79
|
+
puts "failed delete file. #{@pid_file}:#{$!.class}:#{$!.message}"
|
80
|
+
end
|
79
81
|
end
|
80
82
|
puts "shutdown"
|
81
83
|
exit!
|
@@ -87,6 +89,8 @@ class DangoServerFramework
|
|
87
89
|
@gserver = nil # Gserver用の変数
|
88
90
|
@server_reload = nil # サーバーのリロード用フラグ
|
89
91
|
|
92
|
+
@is_pid_file_create = nil # pidファイルを作ったかどうかのフラグ
|
93
|
+
|
90
94
|
# SIGINT の捕捉
|
91
95
|
Signal.trap(:INT) do
|
92
96
|
logger.warn "SIGINT\n#{caller(0).pretty_inspect}"
|
@@ -183,6 +187,7 @@ class DangoServerFramework
|
|
183
187
|
|
184
188
|
GC.disable
|
185
189
|
open(@pid_file, "wb"){|fh| fh.write Process.pid.to_s } # pidをファイルに保存
|
190
|
+
@is_pid_file_create = true # pidファイルを作ったことを記録
|
186
191
|
|
187
192
|
# @gserver.start(@server_max_connections)
|
188
193
|
@gserver.start(@server_max_connections, 20) # backlogを20に設定
|
@@ -286,9 +291,9 @@ class DangoServerFramework
|
|
286
291
|
sock.binmode
|
287
292
|
sock.sync = true
|
288
293
|
|
289
|
-
session[:peer_addr]
|
294
|
+
session[:peer_addr] = sock.peeraddr
|
290
295
|
session[:peer_ip_address] = sock.peeraddr[3]
|
291
|
-
session[:peer_host]
|
296
|
+
session[:peer_host] = sock.peeraddr[2]
|
292
297
|
end
|
293
298
|
|
294
299
|
session[:encode_type] = DefaultEncodeType
|
@@ -306,6 +311,8 @@ class DangoServerFramework
|
|
306
311
|
@arr_send_response.delete_if{|r| r[:time] < Time.now - 60}
|
307
312
|
end
|
308
313
|
|
314
|
+
logger.debug "thread_main:do main loop."
|
315
|
+
|
309
316
|
# メインループ入り
|
310
317
|
loop do
|
311
318
|
if sock.closed?
|
@@ -322,9 +329,8 @@ class DangoServerFramework
|
|
322
329
|
end
|
323
330
|
|
324
331
|
if is_flash_policy_file # Flashのポリシーファイルが来たら
|
325
|
-
|
326
|
-
|
327
|
-
end
|
332
|
+
logger.debug "is_flash_policy_file"
|
333
|
+
do_flash_policy_file(sid, sock)
|
328
334
|
|
329
335
|
# この部分はポリシーファイルを返す設定に関係なく実行する部分
|
330
336
|
sleep 0.1
|
@@ -421,36 +427,40 @@ class DangoServerFramework
|
|
421
427
|
logger.error "Exception #{sid} #{error_message($!, 'u')}"
|
422
428
|
|
423
429
|
ensure
|
430
|
+
# 接続切断の処理
|
424
431
|
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
logger.info "#{sock.inspect} #{sid} is closing"
|
429
|
-
if session[:connected] # dango_connect()が実行済みなら
|
430
|
-
dango_close() # 接続解除時に呼び出されるメソッド
|
431
|
-
end
|
432
|
-
end
|
433
|
-
rescue Exception
|
434
|
-
logger.error "#{sock.inspect} #{sid} ERROR\n#{error_message($!, 'u')}"
|
435
|
-
ensure
|
436
|
-
socket_list.delete(sid) # ソケットリストから削除
|
432
|
+
if !is_flash_policy_file # Flash Policy Fileなら切断処理不要
|
433
|
+
logger.info "#{sock.inspect} #{sid} is closing"
|
434
|
+
if session[:connected] # dango_connect()が実行済みなら
|
437
435
|
begin
|
438
|
-
@
|
439
|
-
|
440
|
-
end
|
441
|
-
rescue IOError
|
442
|
-
logger.info "IOError #{sock.inspect} #{sid}"
|
436
|
+
@mutex_proc_thread.synchronize do
|
437
|
+
dango_close() # 接続解除時に呼び出されるメソッド
|
438
|
+
end # mutex_proc_thread
|
443
439
|
rescue Exception
|
444
|
-
logger.error "#{sock.inspect} #{sid}
|
445
|
-
end
|
446
|
-
|
447
|
-
logger.info "#{sock.inspect} #{sid} is closed"
|
448
|
-
@mutex_sock[sock.object_id].synchronize do
|
449
|
-
sock = nil
|
440
|
+
logger.error "#{sock.inspect} #{sid} ERROR\n#{error_message($!, 'u')}"
|
450
441
|
end
|
451
|
-
@mutex_sock.delete(sock.object_id)
|
452
442
|
end
|
453
|
-
end
|
443
|
+
end
|
444
|
+
|
445
|
+
begin
|
446
|
+
@mutex_sock[sock.object_id].synchronize do
|
447
|
+
sock.close # ソケットを閉じる
|
448
|
+
end
|
449
|
+
rescue IOError
|
450
|
+
logger.info "IOError #{sock.inspect} #{sid}"
|
451
|
+
rescue Exception
|
452
|
+
logger.error "#{sock.inspect} #{sid} Exception\n#{error_message($!, 'u')}"
|
453
|
+
end
|
454
|
+
|
455
|
+
logger.info "#{sock.inspect} #{sid} is closed"
|
456
|
+
|
457
|
+
socket_list.delete(sid) # ソケットリストから削除
|
458
|
+
|
459
|
+
@mutex_sock[sock.object_id].synchronize do
|
460
|
+
sock = nil # ソケット削除
|
461
|
+
end
|
462
|
+
|
463
|
+
@mutex_sock.delete(sock.object_id) # ソケット排他処理から削除
|
454
464
|
|
455
465
|
@session_manager.close_session(sid) # sessionの終了処理
|
456
466
|
end
|
@@ -459,11 +469,10 @@ class DangoServerFramework
|
|
459
469
|
|
460
470
|
# Flashのポリシーファイルの処理
|
461
471
|
def do_flash_policy_file(sid, sock)
|
462
|
-
logger.debug "is_flash_policy_file"
|
463
472
|
|
464
473
|
if @policy_file_request # ポリシーファイルを返す設定なら
|
465
474
|
logger.info "is_flash_policy_file #{sid} #{@policy_file_request}"
|
466
|
-
|
475
|
+
|
467
476
|
allow_str = ""
|
468
477
|
|
469
478
|
@policy_file_allow_domain.each do |one_host|
|
@@ -479,8 +488,11 @@ class DangoServerFramework
|
|
479
488
|
EOF
|
480
489
|
|
481
490
|
logger.debug policy_data
|
482
|
-
sock.
|
483
|
-
|
491
|
+
@mutex_sock[sock.object_id].synchronize do
|
492
|
+
sock.write policy_data
|
493
|
+
sock.flush
|
494
|
+
end
|
495
|
+
|
484
496
|
logger.info "policy file sent."
|
485
497
|
end
|
486
498
|
end
|
@@ -636,14 +648,14 @@ EOF
|
|
636
648
|
begin
|
637
649
|
sleep @gc_interval_sec
|
638
650
|
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
651
|
+
@mutex_proc_thread.synchronize do
|
652
|
+
logger.debug "GC start "
|
653
|
+
gc_start_time = Time.now
|
654
|
+
GC.enable
|
655
|
+
GC.start
|
656
|
+
GC.disable
|
657
|
+
logger.debug "GC end #{Time.now - gc_start_time}sec "
|
658
|
+
end
|
647
659
|
|
648
660
|
output_memory_statistics() if @statistics_process_memory # メモリ使用量統計
|
649
661
|
|
@@ -11,8 +11,8 @@ module DangoFrameworkModule
|
|
11
11
|
def initialize(config)
|
12
12
|
@config = config
|
13
13
|
@data = {}
|
14
|
-
|
15
|
-
@mutex = Mutex.new
|
14
|
+
@mutex = {}
|
15
|
+
# @mutex = Mutex.new
|
16
16
|
|
17
17
|
@transact_key = {}
|
18
18
|
@transact_thread = {}
|
@@ -66,8 +66,8 @@ module DangoFrameworkModule
|
|
66
66
|
raise(DangoFrameworkException, "Shared key is not exist.")
|
67
67
|
end
|
68
68
|
|
69
|
-
|
70
|
-
@mutex.synchronize do
|
69
|
+
@mutex[key].synchronize do
|
70
|
+
# @mutex.synchronize do
|
71
71
|
@transact_key[Thread.current] = key # 違うスレッドからcommitできないように
|
72
72
|
|
73
73
|
raise("nested transaction #{key}") if @transact_thread.has_key?(key)
|
@@ -148,8 +148,8 @@ module DangoFrameworkModule
|
|
148
148
|
# raise(DangoFrameworkException, "Shared key is not exist.")
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
|
-
@mutex.synchronize do
|
151
|
+
@mutex[key].synchronize do
|
152
|
+
# @mutex.synchronize do
|
153
153
|
@data[key].deep_dup
|
154
154
|
end
|
155
155
|
end
|
@@ -164,13 +164,13 @@ module DangoFrameworkModule
|
|
164
164
|
key = key.to_s
|
165
165
|
|
166
166
|
# 未定義なら定義する
|
167
|
-
|
168
|
-
|
169
|
-
|
167
|
+
if !@data.has_key?(key)
|
168
|
+
@mutex[key] = Mutex.new
|
169
|
+
end
|
170
170
|
|
171
171
|
# ロックしてデータを入れる
|
172
|
-
|
173
|
-
@mutex.synchronize do
|
172
|
+
@mutex[key].synchronize do
|
173
|
+
# @mutex.synchronize do
|
174
174
|
@data[key] = value.deep_dup
|
175
175
|
end
|
176
176
|
|
data/lib/dango/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dango
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keisuke Minami
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.4.
|
33
|
+
version: 0.4.6
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: hoe
|