dango 0.0.38 → 0.0.39
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 +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: []
|