p2p2 0.13.2 → 0.13.3

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.
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: