dango 0.0.38 → 0.0.39
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dango/server_framework.rb +49 -25
- data/lib/dango/version.rb +1 -1
- metadata +1 -19
@@ -67,9 +67,17 @@ class DangoServerFramework
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
def
|
71
|
-
# サーバーを停止
|
70
|
+
def stop_gserver() # gserverの停止
|
72
71
|
if @gserver && !@gserver.stopped?
|
72
|
+
# 強制的に接続しているsocketをクローズ
|
73
|
+
logger.info "socket_list.keys:#{socket_list.keys.inspect}"
|
74
|
+
socket_list.keys.each do |sk|
|
75
|
+
logger.debug "sk:#{socket_list[sk].inspect}"
|
76
|
+
socket_list[sk].close if ! socket_list[sk].closed?
|
77
|
+
socket_list[sk]
|
78
|
+
end
|
79
|
+
|
80
|
+
# サーバーを停止
|
73
81
|
@gserver.shutdown
|
74
82
|
@gserver.stop
|
75
83
|
# while(!@gserver.stopped?) do
|
@@ -83,6 +91,9 @@ class DangoServerFramework
|
|
83
91
|
end
|
84
92
|
end
|
85
93
|
|
94
|
+
end
|
95
|
+
|
96
|
+
def exit_process() # プロセス終了処理
|
86
97
|
debug_print("shutdown")
|
87
98
|
puts "shutdown"
|
88
99
|
exit!
|
@@ -96,14 +107,21 @@ class DangoServerFramework
|
|
96
107
|
|
97
108
|
# SIGINT の捕捉
|
98
109
|
Signal.trap(:INT) do
|
110
|
+
stop_gserver() # gserverの停止
|
99
111
|
exit_process() # プロセス終了処理
|
100
112
|
end
|
101
113
|
|
102
114
|
# 終了処理を登録しておく(これが無いとWindowsではエラーが出てもプロセスが落ちないことがある)
|
103
115
|
at_exit do
|
116
|
+
stop_gserver() # gserverの停止
|
104
117
|
exit_process() # プロセス終了処理
|
105
118
|
end
|
106
119
|
|
120
|
+
# スレッドグループの初期化
|
121
|
+
@thr_gr_gserver_serve = ThreadGroup.new
|
122
|
+
@thr_gr_send_notice = ThreadGroup.new
|
123
|
+
@thr_gr_send_data = ThreadGroup.new
|
124
|
+
|
107
125
|
# サーバー開始
|
108
126
|
server_start()
|
109
127
|
|
@@ -176,22 +194,7 @@ class DangoServerFramework
|
|
176
194
|
@server_reload = nil
|
177
195
|
|
178
196
|
debug_print("-- stopping server")
|
179
|
-
|
180
|
-
# 強制的に接続しているsocketをクローズ
|
181
|
-
logger.info "socket_list.keys:#{socket_list.keys.inspect}"
|
182
|
-
socket_list.keys.each do |sk|
|
183
|
-
logger.debug "sk:#{socket_list[sk].inspect}"
|
184
|
-
socket_list[sk].close if ! socket_list[sk].closed?
|
185
|
-
socket_list[sk]
|
186
|
-
end
|
187
|
-
|
188
|
-
# サーバーを停止
|
189
|
-
@gserver.shutdown
|
190
|
-
@gserver.stop
|
191
|
-
while(!@gserver.stopped?) do
|
192
|
-
sleep ServerStopWait
|
193
|
-
debug_print("waiting... #{@gserver.stopped?} #{@gserver.connections}")
|
194
|
-
end
|
197
|
+
stop_gserver() # gserverの停止
|
195
198
|
|
196
199
|
@gserver = nil
|
197
200
|
|
@@ -263,6 +266,8 @@ class DangoServerFramework
|
|
263
266
|
def thread_main(sock)
|
264
267
|
logger.info "#{sock} is accepted. thread.current=#{Thread.current.object_id} "
|
265
268
|
|
269
|
+
@thr_gr_gserver_serve.add(Thread.current) # スレッドグループに登録
|
270
|
+
|
266
271
|
begin
|
267
272
|
sock.binmode
|
268
273
|
sock.sync = true
|
@@ -442,7 +447,7 @@ class DangoServerFramework
|
|
442
447
|
@log_level_str = str if const == @log_level
|
443
448
|
end
|
444
449
|
|
445
|
-
|
450
|
+
# 統計用情報の初期化
|
446
451
|
@start_time = Time.now # サーバー起動時間
|
447
452
|
@recv_count = 0 # 受信回数
|
448
453
|
@send_count = 0 # 送信回数
|
@@ -559,13 +564,13 @@ class DangoServerFramework
|
|
559
564
|
# セッション
|
560
565
|
def session_init # セッション情報の初期化
|
561
566
|
@session_list = {}
|
562
|
-
@session_th_list = {}
|
567
|
+
# @session_th_list = {}
|
563
568
|
end
|
564
569
|
def session
|
565
570
|
if !Thread.current[:session]
|
566
571
|
Thread.current[:session] = {}
|
567
572
|
@session_list[Thread.current.object_id] = Thread.current[:session]
|
568
|
-
@session_th_list[Thread.current.object_id] = Thread.current
|
573
|
+
# @session_th_list[Thread.current.object_id] = Thread.current
|
569
574
|
end
|
570
575
|
Thread.current[:session]
|
571
576
|
# sid = Thread.current.object_id
|
@@ -574,11 +579,11 @@ class DangoServerFramework
|
|
574
579
|
end
|
575
580
|
def session_del # セッション情報の初期化
|
576
581
|
@session_list.delete(Thread.current.object_id)
|
577
|
-
@session_th_list.delete(Thread.current)
|
582
|
+
# @session_th_list.delete(Thread.current)
|
578
583
|
end
|
579
584
|
|
580
585
|
attr_reader(:session_list)
|
581
|
-
attr_reader(:session_th_list)
|
586
|
+
# attr_reader(:session_th_list)
|
582
587
|
|
583
588
|
# ソケットとIDの対応
|
584
589
|
def socket_list_init
|
@@ -646,6 +651,7 @@ class DangoServerFramework
|
|
646
651
|
shared[:_heart_beat_time_hash] = {}
|
647
652
|
|
648
653
|
th = Thread.start do
|
654
|
+
count = 0
|
649
655
|
loop do
|
650
656
|
begin
|
651
657
|
sleep @herat_beat_interval_sec
|
@@ -666,12 +672,26 @@ class DangoServerFramework
|
|
666
672
|
if heart_beat_time_hash[sid] && heart_beat_time_hash[sid] < Time.now - @heart_beat_receive_wait_sec
|
667
673
|
logger.warn "!!!! heart_beat_thread_start:heart beat old:#{sid}:#{heart_beat_time_hash[sid]}:#{sock}:#{sock.closed?}"
|
668
674
|
sock.close if !sock.closed?
|
669
|
-
logger.warn "!!!! heart_beat_thread_start:thread kill:#{session_th_list[sid]}"
|
670
|
-
session_th_list[sid].kill
|
675
|
+
# logger.warn "!!!! heart_beat_thread_start:thread kill:#{session_th_list[sid]}"
|
676
|
+
# session_th_list[sid].kill
|
671
677
|
end
|
672
678
|
end
|
673
679
|
end
|
674
680
|
|
681
|
+
# スレッド情報をログに出力
|
682
|
+
if logger.debug?
|
683
|
+
count += 1
|
684
|
+
if count % 100 == 0
|
685
|
+
sids = socket_list.keys
|
686
|
+
thr_list = @thr_gr_gserver_serve.list.collect{|th| th.object_id }
|
687
|
+
|
688
|
+
logger.debug "heart_beat_thread_start:sids=#{sids.inspect}"
|
689
|
+
logger.debug "heart_beat_thread_start:thr_list=#{thr_list.inspect}"
|
690
|
+
logger.debug "heart_beat_thread_start:sids-thr_list=#{(sids-thr_list).inspect}"
|
691
|
+
logger.debug "heart_beat_thread_start:thr_list-sids=#{(thr_list-sids).inspect}"
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
675
695
|
rescue Exception
|
676
696
|
logger.error "Exception heart_beat_thread_start #{error_message($!, 'u')}"
|
677
697
|
end
|
@@ -719,6 +739,8 @@ class DangoServerFramework
|
|
719
739
|
else
|
720
740
|
Thread.start(sid, notice_name, send_obj, dtype, timeout, sock) do
|
721
741
|
begin
|
742
|
+
@thr_gr_send_notice.add(Thread.current) # send_noticeスレッドグループに登録
|
743
|
+
|
722
744
|
raise(DangoFrameworkError, "not found sid=#{sid}") if !sock
|
723
745
|
raise(DangoFrameworkConnectionError, "socket closed. sid=#{sid}") if sock.closed?
|
724
746
|
|
@@ -734,6 +756,8 @@ class DangoServerFramework
|
|
734
756
|
|
735
757
|
receive_thread = Thread.start(sock, send_obj_dup, dtype) do
|
736
758
|
begin
|
759
|
+
@thr_gr_send_data.add(Thread.current) # send_dataスレッドグループに登録
|
760
|
+
|
737
761
|
dango_send_data(sock, send_obj_dup, :type=>dtype) # データ送信
|
738
762
|
# logger.debug "send_notice:sent:notice_name=#{send_obj_dup['_id']} #{notice_name.inspect} #{sid} "
|
739
763
|
rescue DangoFrameworkConnectionError
|
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.0.
|
4
|
+
version: 0.0.39
|
5
5
|
platform: ""
|
6
6
|
authors:
|
7
7
|
- Keisuke Minami
|
@@ -12,15 +12,6 @@ cert_chain: []
|
|
12
12
|
date: 2007-12-01 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: json_pure
|
17
|
-
version_requirement:
|
18
|
-
version_requirements: !ruby/object:Gem::Requirement
|
19
|
-
requirements:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: "0"
|
23
|
-
version:
|
24
15
|
- !ruby/object:Gem::Dependency
|
25
16
|
name: rake
|
26
17
|
version_requirement:
|
@@ -30,15 +21,6 @@ dependencies:
|
|
30
21
|
- !ruby/object:Gem::Version
|
31
22
|
version: "0"
|
32
23
|
version:
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: dango_generator
|
35
|
-
version_requirement:
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.38
|
41
|
-
version:
|
42
24
|
description: Realtime communications network framework for Ruby and Flash on Rails.
|
43
25
|
email: keisuke@rccn.com
|
44
26
|
executables: []
|