dango 0.0.38 → 0.0.39

Sign up to get free protection for your applications and to get access to all the features.
@@ -67,9 +67,17 @@ class DangoServerFramework
67
67
  end
68
68
  end
69
69
 
70
- def exit_process() # プロセス終了処理
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
@@ -2,7 +2,7 @@ module Dango #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 38
5
+ TINY = 39
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
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.38
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: []