dango 0.0.24 → 0.0.25
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 +45 -25
- data/lib/dango/shared/memory_store.rb +2 -1
- data/lib/dango/socket_list.rb +1 -1
- data/lib/dango/version.rb +1 -1
- metadata +12 -4
@@ -16,11 +16,18 @@ require "dango/monitor/server_monitor_action"
|
|
16
16
|
class DangoServerFramework
|
17
17
|
include DangoFrameworkModule
|
18
18
|
|
19
|
-
|
19
|
+
### 以下すべてデフォルト値
|
20
|
+
DefaultNetworkPort = 15000 # デフォルトのポート番号
|
21
|
+
DefaultServerHost = 'localhost' # デフォルトのホスト名 # 接続制限ホスト "0.0.0.0"にすれば全接続オッケイ
|
22
|
+
DefaultMaxConnections = 10 # デフォルトの最大接続人数
|
23
|
+
|
24
|
+
# ここから先は普通は変更しなくていいだろうというもの
|
25
|
+
SendReceiveSleepIntervalSec = 0.2 # データ送信時のタイムアウトチェック間隔秒
|
20
26
|
SendReceiveTimeoutDefaultSec = 2.0 # データ送受信時のデフォルトタイムアウト秒数
|
21
27
|
SendTimeoutSec = 10.0 # データ送受信時の送信のタイムアウト秒数
|
22
|
-
|
23
|
-
|
28
|
+
HeartBeatIntervalSec = 60.0 # S=>Cのheart beatの送信間隔秒数
|
29
|
+
HeartBeatResponseWaitSec = 20.0 # S=>Cのheart beatの返信待ち秒数
|
30
|
+
|
24
31
|
|
25
32
|
class DangoGServer < GServer
|
26
33
|
def initialize(parent, *args)
|
@@ -99,7 +106,14 @@ class DangoServerFramework
|
|
99
106
|
@connection_server_host,
|
100
107
|
@connection_server_max_connections)
|
101
108
|
@gserver.audit = true # Turn logging on.
|
102
|
-
|
109
|
+
|
110
|
+
begin
|
111
|
+
@gserver.start
|
112
|
+
rescue Exception
|
113
|
+
error_msg = "#{$!.class} #{$!.message} #{$!.backtrace.pretty_inspect}"
|
114
|
+
cs_logger.error error_msg
|
115
|
+
puts error_msg
|
116
|
+
end
|
103
117
|
end
|
104
118
|
|
105
119
|
# サーバーのループ時のクラス読み直し処理
|
@@ -152,9 +166,7 @@ class DangoServerFramework
|
|
152
166
|
begin
|
153
167
|
load f[:file]
|
154
168
|
rescue Exception
|
155
|
-
|
156
|
-
p $!.message
|
157
|
-
p $!.backtrace
|
169
|
+
puts "#{$!.class} #{$!.message} #{$!.backtrace.pretty_inspect}"
|
158
170
|
end
|
159
171
|
end
|
160
172
|
|
@@ -183,7 +195,8 @@ class DangoServerFramework
|
|
183
195
|
# gserverのserveメソッド:スレッド開始処理
|
184
196
|
def thread_main(sock)
|
185
197
|
cs_logger.debug "thread_main:start"
|
186
|
-
cs_logger.debug "#{sock} is accepted. thread.current=#{Thread.current.object_id} sock_id=#{sock.object_id}"
|
198
|
+
# cs_logger.debug "#{sock} is accepted. thread.current=#{Thread.current.object_id} sock_id=#{sock.object_id}"
|
199
|
+
cs_logger.debug "#{sock} is accepted. thread.current=#{Thread.current.object_id}"
|
187
200
|
|
188
201
|
begin
|
189
202
|
sock.binmode
|
@@ -287,12 +300,12 @@ class DangoServerFramework
|
|
287
300
|
cs_logger.error "Exception #{sid} #{Time.now_to_s} #{error_message($!, 'u')}"
|
288
301
|
|
289
302
|
ensure
|
290
|
-
cs_logger.debug "#{sock.inspect}
|
303
|
+
cs_logger.debug "#{sock.inspect} #{sid} is gone"
|
291
304
|
|
292
305
|
@mutex_proc_thread.synchronize do
|
293
306
|
begin
|
294
307
|
cs_close() # 接続解除時に呼び出されるメソッド
|
295
|
-
rescue
|
308
|
+
rescue Exception
|
296
309
|
cs_logger.error "#{error_message($!, 'u')}"
|
297
310
|
ensure
|
298
311
|
socket_list.delete(sid) # ソケットリストから削除
|
@@ -302,7 +315,7 @@ class DangoServerFramework
|
|
302
315
|
cs_logger.debug "IOError #{sock} #{sid}"
|
303
316
|
end
|
304
317
|
|
305
|
-
cs_logger.debug "#{sock.inspect}
|
318
|
+
cs_logger.debug "#{sock.inspect} #{sid} is gone 2"
|
306
319
|
end
|
307
320
|
|
308
321
|
end
|
@@ -326,11 +339,17 @@ class DangoServerFramework
|
|
326
339
|
Thread.abort_on_exception = true if @server_debug
|
327
340
|
|
328
341
|
# 変数の初期設定
|
329
|
-
@connection_server_port = @config['network']['port'] ||
|
330
|
-
@connection_server_host = @config['server']['host'] ||
|
331
|
-
@connection_server_max_connections = @config['server']['max_connections'] ||
|
342
|
+
@connection_server_port = @config['network']['port'] || DefaultNetworkPort
|
343
|
+
@connection_server_host = @config['server']['host'] || DefaultServerHost
|
344
|
+
@connection_server_max_connections = @config['server']['max_connections'] || DefaultMaxConnections
|
332
345
|
@log_file = @config['server']['log_file'] || ""
|
333
346
|
@policy_file_request = @config['server']['policy_file_request'] || true
|
347
|
+
@send_receive_sleep_interval_sec = @config['server']['send_receive_sleep_interval_sec'] || SendReceiveSleepIntervalSec
|
348
|
+
@send_receive_timeout_default_sec = @config['server']['send_receive_timeout_default_sec'] || SendReceiveTimeoutDefaultSec
|
349
|
+
@send_timeout_sec = @config['server']['send_timeout_sec'] || SendTimeoutSec
|
350
|
+
@herat_beat_interval_sec = @config['server']['heart_beat_interval_sec'] || HeartBeatIntervalSec
|
351
|
+
@heart_beat_response_wait_sec = @config['server']['heart_beat_response_wait_sec'] || HeartBeatResponseWaitSec
|
352
|
+
|
334
353
|
|
335
354
|
log_level_hash = {
|
336
355
|
"FATAL" => Logger::FATAL,
|
@@ -516,17 +535,18 @@ class DangoServerFramework
|
|
516
535
|
Thread.start do
|
517
536
|
loop do
|
518
537
|
begin
|
519
|
-
sleep
|
538
|
+
sleep @herat_beat_interval_sec
|
520
539
|
|
521
540
|
if ! @gserver.stopped? # gserverが起動していれば
|
522
541
|
cs_logger.debug "heart_beat_thread_start #{Time.now_to_s}"
|
523
542
|
|
524
|
-
#
|
543
|
+
# 全員へheart_beatパケットを送信
|
525
544
|
socket_list.keys.each do |sid|
|
526
|
-
sock = socket_list[sid]
|
527
|
-
cs_logger.debug "heart_beat_thread_start:sid=#{sid} #{sock} #{sock.closed?}"
|
545
|
+
# sock = socket_list[sid]
|
546
|
+
# cs_logger.debug "heart_beat_thread_start:sid=#{sid} #{sock} #{sock.closed?}"
|
528
547
|
# cs_send_data(sock, {})
|
529
|
-
|
548
|
+
cs_logger.debug "heart_beat_thread_start:sid=#{sid}"
|
549
|
+
cs_server_send_data(sid, "_heart_beat", {}, {:timeout=>@heart_beat_response_wait_sec})
|
530
550
|
end
|
531
551
|
end
|
532
552
|
|
@@ -544,11 +564,11 @@ class DangoServerFramework
|
|
544
564
|
|
545
565
|
raise(DangoFrameworkError, "send_obj is not Hash.") if ! send_obj.is_a?(Hash)
|
546
566
|
|
547
|
-
timeout = options[:timeout] ||
|
567
|
+
timeout = options[:timeout] || @send_receive_timeout_default_sec
|
548
568
|
dtype = options[:type] || 0
|
549
569
|
|
550
570
|
sock = socket_list[sid]
|
551
|
-
if !sock # sockがないという事はすでに切断済み
|
571
|
+
if !sock || sock.closed? # sockがないという事はすでに切断済み
|
552
572
|
cs_logger.info "cs_server_send_data:already closed socket. sid=#{sid.inspect} sock=#{sock.inspect} #{Time.now_to_s}"
|
553
573
|
return
|
554
574
|
end
|
@@ -591,7 +611,7 @@ class DangoServerFramework
|
|
591
611
|
end
|
592
612
|
|
593
613
|
# データ送信スレッドの終了待ち
|
594
|
-
if !receive_thread.join(
|
614
|
+
if !receive_thread.join(@send_timeout_sec)
|
595
615
|
# タイムアウトの場合は
|
596
616
|
cs_logger.warn "cs_server_send_data:send timeout:#{notice_name} #{sid} #{Time.now_to_s}"
|
597
617
|
else
|
@@ -600,7 +620,7 @@ class DangoServerFramework
|
|
600
620
|
|
601
621
|
# タイムアウトチェック
|
602
622
|
catch(:send_timeout) do
|
603
|
-
(timeout.to_f /
|
623
|
+
(timeout.to_f / @send_receive_sleep_interval_sec).to_i.times do
|
604
624
|
if Time.now > end_reserved_time
|
605
625
|
cs_logger.debug "cs_server_send_data:receive timeout:#{notice_name}"
|
606
626
|
|
@@ -611,7 +631,7 @@ class DangoServerFramework
|
|
611
631
|
break
|
612
632
|
end
|
613
633
|
|
614
|
-
@mutex_send_response.synchronize do
|
634
|
+
@mutex_send_response.synchronize do # データ送信の返信が来たかどうかの確認
|
615
635
|
find_res = @arr_send_response.find{|r| r[:_id] == send_obj_dup["_id"]}
|
616
636
|
|
617
637
|
if find_res
|
@@ -623,7 +643,7 @@ class DangoServerFramework
|
|
623
643
|
end
|
624
644
|
end
|
625
645
|
|
626
|
-
sleep
|
646
|
+
sleep @send_receive_sleep_interval_sec # スリープ
|
627
647
|
end # タイムアウト処理終わり
|
628
648
|
end # catch 終わり
|
629
649
|
|
data/lib/dango/socket_list.rb
CHANGED
@@ -37,7 +37,7 @@ class SocketList
|
|
37
37
|
|
38
38
|
def []=(key, sock)
|
39
39
|
@sl_mutex.synchronize do
|
40
|
-
raise("not exist key(#{key.inspect})") if ! @sl_hash.has_key?(key)
|
40
|
+
# raise("not exist key(#{key.inspect})") if ! @sl_hash.has_key?(key)
|
41
41
|
raise("sock(#{sock.inspect}) is not Socket") if sock.kind_of?(Socket)
|
42
42
|
@sl_hash[key] = sock
|
43
43
|
end
|
data/lib/dango/version.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: dango
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-10-
|
6
|
+
version: 0.0.25
|
7
|
+
date: 2007-10-31 00:00:00 +09:00
|
8
8
|
summary: Realtime communications network framework for Ruby and Flash on Rails.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -68,5 +68,13 @@ extensions: []
|
|
68
68
|
|
69
69
|
requirements: []
|
70
70
|
|
71
|
-
dependencies:
|
72
|
-
|
71
|
+
dependencies:
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: json
|
74
|
+
version_requirement:
|
75
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 0.0.0
|
80
|
+
version:
|