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.
@@ -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: []