p2p2 0.13.0 → 0.13.1

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: 89df8a602b433ccee8fcd513d2c981f00fecec8e43fe87880b556e35f7d8501f
4
- data.tar.gz: 5b038d3b9e91156b8a2daec9f8f68709c7e26f7dbbaac24fef988021402123a9
3
+ metadata.gz: 005d9edef0301a013f19fd3a2e0eb5bf9d379f0aa525110c7a897e00b6470fb1
4
+ data.tar.gz: 37f62fb12e229618dfb7e9fe89f7fb056d0ee6fc08cf2b74b3efc67f1478d43f
5
5
  SHA512:
6
- metadata.gz: 429c289884013dcc5c38f053bdeb1bd633717fb7693bd3338587b82bbbfb8d502d4d8796b3c3d51692a070793564604cb724be8be9af62621bff4e7c4b382496
7
- data.tar.gz: 3b5a22f02861ab18197630475857722c0bc51a7ab3954b375a0e218306b3f1b6d2a1950fa2a96b47f0ee9c40b5b000b3dec4402d911c88aae9f01a34257c2957
6
+ metadata.gz: 044470f121c082f378fd738fe287cfc0fe83cae57d4b76a96d568e92447c778497cc440255530fd9e590dbc6e07c2be716e24f90e5273e293ba94396ceff4fce
7
+ data.tar.gz: b30f178973e03d883345c0aaff52c4704bcb3aa909dad7471cde0146eed4521fe2fa9e38be1c6b17f249ce0c10e2b2c0097cc41c9810f545f4d532b56f5d6901
@@ -5,6 +5,7 @@ module P2p2
5
5
  WMEMS_LIMIT = 100_000 # 写后上限,到达上限暂停写
6
6
  RESUME_BELOW = 50_000 # 降到多少以下恢复写
7
7
  EXPIRE_AFTER = 1800 # 多久过期
8
+ HEARTBEAT_INTERVAL = 3 # 心跳间隔
8
9
  STATUS_INTERVAL = 0.3 # 发送状态间隔
9
10
  SEND_STATUS_UNTIL = 20 # 持续的告之对面状态,直到没有流量往来,持续多少秒
10
11
  PEER_ADDR = 1
@@ -178,15 +178,15 @@ module P2p2
178
178
  peer_addr = data[ 9..-1 ]
179
179
  info[ :peer_addr ] = data[ 9..-1 ]
180
180
  # puts "debug peer addr #{ Addrinfo.new( info[ :peer_addr ] ).ip_unpack.inspect } #{ Time.new }"
181
- loop_send_heartbeat( p1 )
181
+ loop_punch_peer( p1 )
182
182
  when HEARTBEAT
183
183
  return if info[ :p2_addr ] || ( sockaddr != info[ :peer_addr ] )
184
184
 
185
185
  info[ :p2_addr ] = sockaddr
186
186
  # puts "debug p2 addr #{ Addrinfo.new( info[ :p2_addr ] ).ip_unpack.inspect } #{ Time.new }"
187
187
  info[ :last_traffic_at ] = now
188
+ loop_send_heartbeat( p1 )
188
189
  loop_send_status( p1 )
189
- loop_expire( p1 )
190
190
  when A_NEW_APP
191
191
  return if sockaddr != info[ :p2_addr ]
192
192
 
@@ -621,7 +621,7 @@ module P2p2
621
621
  is_timeout = true
622
622
 
623
623
  12.times do
624
- sleep 5
624
+ sleep HEARTBEAT_INTERVAL
625
625
 
626
626
  if p1.closed?
627
627
  is_timeout = false
@@ -648,7 +648,7 @@ module P2p2
648
648
  end
649
649
  end
650
650
 
651
- def loop_send_heartbeat( p1 )
651
+ def loop_punch_peer( p1 )
652
652
  Thread.new do
653
653
  20.times do
654
654
  break if p1.closed?
@@ -674,20 +674,24 @@ module P2p2
674
674
  end
675
675
  end
676
676
 
677
- def loop_expire( p1 )
677
+ def loop_send_heartbeat( p1 )
678
678
  Thread.new do
679
679
  loop do
680
- sleep 5
680
+ sleep HEARTBEAT_INTERVAL
681
681
  break if p1.closed?
682
682
 
683
683
  p1_info = @infos[ p1 ]
684
684
 
685
- @mutex.synchronize do
686
- if Time.new - p1_info[ :last_traffic_at ] > EXPIRE_AFTER
685
+ if Time.new - p1_info[ :last_traffic_at ] > EXPIRE_AFTER
686
+ @mutex.synchronize do
687
687
  @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
688
- else
689
- send_heartbeat( p1, p1_info[ :p2_addr ] )
690
688
  end
689
+
690
+ return
691
+ end
692
+
693
+ @mutex.synchronize do
694
+ send_heartbeat( p1, p1_info[ :p2_addr ] )
691
695
  end
692
696
  end
693
697
  end
@@ -231,15 +231,15 @@ module P2p2
231
231
 
232
232
  info[ :peer_addr ] = data[ 9..-1 ]
233
233
  # puts "debug peer addr #{ Addrinfo.new( info[ :peer_addr ] ).ip_unpack.inspect } #{ Time.new }"
234
- loop_send_heartbeat( p2 )
234
+ loop_punch_peer( p2 )
235
235
  when HEARTBEAT
236
236
  return if info[ :p1_addr ] || ( sockaddr != info[ :peer_addr ] )
237
237
 
238
238
  info[ :p1_addr ] = sockaddr
239
239
  # puts "debug p1 addr #{ Addrinfo.new( info[ :p1_addr ] ).ip_unpack.inspect } #{ Time.new }"
240
240
  info[ :last_traffic_at ] = now
241
+ loop_send_heartbeat( p2 )
241
242
  loop_send_status( p2 )
242
- loop_expire( p2 )
243
243
  when PAIRED
244
244
  return if sockaddr != info[ :p1_addr ]
245
245
 
@@ -651,7 +651,7 @@ module P2p2
651
651
  is_timeout = true
652
652
 
653
653
  12.times do
654
- sleep 5
654
+ sleep HEARTBEAT_INTERVAL
655
655
 
656
656
  if p2.closed?
657
657
  is_timeout = false
@@ -678,7 +678,7 @@ module P2p2
678
678
  end
679
679
  end
680
680
 
681
- def loop_send_heartbeat( p2 )
681
+ def loop_punch_peer( p2 )
682
682
  Thread.new do
683
683
  20.times do
684
684
  break if p2.closed?
@@ -704,10 +704,10 @@ module P2p2
704
704
  end
705
705
  end
706
706
 
707
- def loop_expire( p2 )
707
+ def loop_send_heartbeat( p2 )
708
708
  Thread.new do
709
709
  loop do
710
- sleep 5
710
+ sleep HEARTBEAT_INTERVAL
711
711
  break if p2.closed?
712
712
 
713
713
  p2_info = @infos[ p2 ]
@@ -716,10 +716,12 @@ module P2p2
716
716
  @mutex.synchronize do
717
717
  @ctlw.write( [ CTL_CLOSE, p2.object_id ].pack( 'CQ>' ) )
718
718
  end
719
- else
720
- @mutex.synchronize do
721
- send_heartbeat( p2, p2_info[ :p1_addr ] )
722
- end
719
+
720
+ break
721
+ end
722
+
723
+ @mutex.synchronize do
724
+ send_heartbeat( p2, p2_info[ :p1_addr ] )
723
725
  end
724
726
  end
725
727
  end
@@ -1,3 +1,3 @@
1
1
  module P2p2
2
- VERSION = "0.13.0"
2
+ VERSION = '0.13.1'.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.0
4
+ version: 0.13.1
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-30 00:00:00.000000000 Z
11
+ date: 2019-08-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 内网里的任意应用,访问另一个内网里的应用服务端。
14
14
  email: