p2p2 0.13.2 → 0.13.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f592be172011dd06ec67c135960733566f00fa1eb7a1c38653dc1b9cbe243d04
4
- data.tar.gz: 13fe9278adb7a30300da415ab14b6e9b6559640a90a800852a6fec960485f11c
3
+ metadata.gz: b842b71209b16ce71a511f18800372793f12450b2b5fa19d63e734cb5af9ae4f
4
+ data.tar.gz: 5f5de12057407febe98aa968320be17346824120ba881c2556d768b351dd36d7
5
5
  SHA512:
6
- metadata.gz: ac62a35279f5634182596b8fa62e4e17968d8aa732113071cdf65d875a7a85491f35383e576787b203709b1ae3553daa407afd746fcb64cbe899fab057b90226
7
- data.tar.gz: ae071136ca81b01503a7d25e56944bcc693c11697a65f26cb5670a217d18306dbab9e1dfcacae197b7e5292d475660a2ed3eea5ae6337201fb353989b83b3fcf
6
+ metadata.gz: 9c9bd5ddf876bcf5686110c2e2a399b8c6f0cb5dc308773e84d060f31a9df86160022d6acb4dce45ee4e4e895ce9dde98493dc1e22763d358565b559beb8e1eb
7
+ data.tar.gz: d909aee5d91e2ebca9b41966e5a49150ba6741b7c69559f169b346045edc9a3922cfbccebaf3939dbdb1abb85f2c0e509f49663a9fcff744e21f5e30d61c2dbf
@@ -107,7 +107,6 @@ module P2p2
107
107
  sock = @socks[ sock_id ]
108
108
 
109
109
  if sock
110
- # puts "debug ctlr close #{ sock_id } #{ Time.new }"
111
110
  add_closing( sock )
112
111
  end
113
112
  when CTL_RESUME
@@ -115,7 +114,6 @@ module P2p2
115
114
  sock = @socks[ sock_id ]
116
115
 
117
116
  if sock
118
- puts "ctlr resume #{ sock_id } #{ Time.new }"
119
117
  add_write( sock )
120
118
  end
121
119
  end
@@ -186,6 +184,7 @@ module P2p2
186
184
  # puts "debug p2 addr #{ Addrinfo.new( info[ :p2_addr ] ).ip_unpack.inspect } #{ Time.new }"
187
185
  info[ :last_traffic_at ] = now
188
186
  loop_send_heartbeat( p1 )
187
+ loop_check_expire( p1 )
189
188
  loop_send_status( p1 )
190
189
  when A_NEW_APP
191
190
  return if sockaddr != info[ :p2_addr ]
@@ -212,6 +211,8 @@ module P2p2
212
211
 
213
212
  info[ :shadow_exts ][ shadow_id ] = {
214
213
  shadow: shadow,
214
+ created_at: now,
215
+ last_recv_at: nil, # 上一次收到流量的时间
215
216
  wbuff: '', # 写前缓存
216
217
  cache: '', # 块读出缓存
217
218
  chunks: [], # 块队列,写前达到块大小时结一个块 filename
@@ -424,6 +425,8 @@ module P2p2
424
425
  else
425
426
  ext[ :pieces ][ pack_id ] = data
426
427
  end
428
+
429
+ ext[ :last_recv_at ] = now
427
430
  end
428
431
 
429
432
  ##
@@ -680,18 +683,43 @@ module P2p2
680
683
  sleep HEARTBEAT_INTERVAL
681
684
  break if p1.closed?
682
685
 
686
+ @mutex.synchronize do
687
+ p1_info = @infos[ p1 ]
688
+ send_heartbeat( p1, p1_info[ :p2_addr ] )
689
+ end
690
+ end
691
+ end
692
+ end
693
+
694
+ def loop_check_expire( p1 )
695
+ Thread.new do
696
+ loop do
697
+ sleep 60
698
+ break if p1.closed?
699
+
700
+ now = Time.new
683
701
  p1_info = @infos[ p1 ]
684
702
 
685
- if Time.new - p1_info[ :last_traffic_at ] > EXPIRE_AFTER
703
+ if now - p1_info[ :last_traffic_at ] > EXPIRE_AFTER
686
704
  @mutex.synchronize do
705
+ # puts "debug ctlw close p1 #{ p1.object_id } #{ Time.new } p#{ Process.pid }"
687
706
  @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
688
707
  end
689
708
 
690
- return
709
+ break
691
710
  end
692
711
 
693
- @mutex.synchronize do
694
- send_heartbeat( p1, p1_info[ :p2_addr ] )
712
+ exts = p1_info[ :shadow_exts ].select{ | _, ext | now - ext[ :created_at ] > 5 }
713
+
714
+ if exts.any?
715
+ @mutex.synchronize do
716
+ exts.each do | shadow_id, ext |
717
+ if ext[ :last_recv_at ].nil? || ( now - ext[ :last_recv_at ] > EXPIRE_AFTER )
718
+ # puts "debug ctlw close shadow #{ shadow_id } #{ Time.new } p#{ Process.pid }"
719
+ @ctlw.write( [ CTL_CLOSE, shadow_id ].pack( 'CQ>' ) )
720
+ end
721
+ end
722
+ end
695
723
  end
696
724
  end
697
725
  end
@@ -731,6 +759,7 @@ module P2p2
731
759
 
732
760
  if p1_info[ :paused ] && ( p1_info[ :shadow_exts ].map{ | _, ext | ext[ :wmems ].size }.sum < RESUME_BELOW )
733
761
  @mutex.synchronize do
762
+ puts "ctlw resume #{ p1.object_id } #{ Time.new }"
734
763
  @ctlw.write( [ CTL_RESUME, p1.object_id ].pack( 'CQ>' ) )
735
764
  p1_info[ :paused ] = false
736
765
  end
@@ -109,7 +109,6 @@ module P2p2
109
109
  sock = @socks[ sock_id ]
110
110
 
111
111
  if sock
112
- # puts "debug ctlr close #{ sock_id } #{ Time.new }"
113
112
  add_closing( sock )
114
113
  end
115
114
  when CTL_RESUME
@@ -117,7 +116,6 @@ module P2p2
117
116
  sock = @socks[ sock_id ]
118
117
 
119
118
  if sock
120
- puts "ctlr resume #{ sock_id } #{ Time.new }"
121
119
  add_write( sock )
122
120
  end
123
121
  end
@@ -148,6 +146,8 @@ module P2p2
148
146
  @p2_info[ :waitings ][ app_id ] = []
149
147
  @p2_info[ :app_exts ][ app_id ] = {
150
148
  app: app,
149
+ created_at: Time.new,
150
+ last_recv_at: nil, # 上一次收到流量的时间
151
151
  wbuff: '', # 写前缓存
152
152
  cache: '', # 块读出缓存
153
153
  chunks: [], # 块队列,写前达到块大小时结一个块 filename
@@ -239,6 +239,7 @@ module P2p2
239
239
  # puts "debug p1 addr #{ Addrinfo.new( info[ :p1_addr ] ).ip_unpack.inspect } #{ Time.new }"
240
240
  info[ :last_traffic_at ] = now
241
241
  loop_send_heartbeat( p2 )
242
+ loop_check_expire( p2 )
242
243
  loop_send_status( p2 )
243
244
  when PAIRED
244
245
  return if sockaddr != info[ :p1_addr ]
@@ -443,6 +444,8 @@ module P2p2
443
444
  else
444
445
  ext[ :pieces ][ pack_id ] = data
445
446
  end
447
+
448
+ ext[ :last_recv_at ] = now
446
449
  end
447
450
 
448
451
  ##
@@ -710,18 +713,43 @@ module P2p2
710
713
  sleep HEARTBEAT_INTERVAL
711
714
  break if p2.closed?
712
715
 
716
+ @mutex.synchronize do
717
+ p2_info = @infos[ p2 ]
718
+ send_heartbeat( p2, p2_info[ :p1_addr ] )
719
+ end
720
+ end
721
+ end
722
+ end
723
+
724
+ def loop_check_expire( p2 )
725
+ Thread.new do
726
+ loop do
727
+ sleep 60
728
+ break if p2.closed?
729
+
730
+ now = Time.new
713
731
  p2_info = @infos[ p2 ]
714
732
 
715
- if Time.new - p2_info[ :last_traffic_at ] > EXPIRE_AFTER
733
+ if now - p2_info[ :last_traffic_at ] > EXPIRE_AFTER
716
734
  @mutex.synchronize do
735
+ # puts "debug ctlw close p2 #{ p2.object_id } #{ Time.new } p#{ Process.pid }"
717
736
  @ctlw.write( [ CTL_CLOSE, p2.object_id ].pack( 'CQ>' ) )
718
737
  end
719
738
 
720
739
  break
721
740
  end
722
741
 
723
- @mutex.synchronize do
724
- send_heartbeat( p2, p2_info[ :p1_addr ] )
742
+ exts = p2_info[ :app_exts ].select{ | _, ext | now - ext[ :created_at ] > 5 }
743
+
744
+ if exts.any?
745
+ @mutex.synchronize do
746
+ exts.each do | app_id, ext |
747
+ if ext[ :last_recv_at ].nil? || ( now - ext[ :last_recv_at ] > EXPIRE_AFTER )
748
+ # puts "debug ctlw close app #{ app_id } #{ Time.new } p#{ Process.pid }"
749
+ @ctlw.write( [ CTL_CLOSE, app_id ].pack( 'CQ>' ) )
750
+ end
751
+ end
752
+ end
725
753
  end
726
754
  end
727
755
  end
@@ -761,6 +789,7 @@ module P2p2
761
789
 
762
790
  if p2_info[ :paused ] && ( p2_info[ :app_exts ].map{ | _, ext | ext[ :wmems ].size }.sum < RESUME_BELOW )
763
791
  @mutex.synchronize do
792
+ puts "ctlw resume #{ p2.object_id } #{ Time.new }"
764
793
  @ctlw.write( [ CTL_RESUME, p2.object_id ].pack( 'CQ>' ) )
765
794
  p2_info[ :paused ] = false
766
795
  end
@@ -1,3 +1,3 @@
1
1
  module P2p2
2
- VERSION = '0.13.2'.freeze
2
+ VERSION = '0.13.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p2p2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.2
4
+ version: 0.13.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - takafan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-31 00:00:00.000000000 Z
11
+ date: 2019-09-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 内网里的任意应用,访问另一个内网里的应用服务端。
14
14
  email: