dango 0.0.24 → 0.0.25
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|