p2p2 0.13.0 → 0.13.1

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