parallel_server 0.1.4 → 0.1.5

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
  SHA1:
3
- metadata.gz: 60f22791a70556733877e1abacd86ffc257fafd6
4
- data.tar.gz: 66d5e90cdca52f41dc687cd160e54b8fb030f858
3
+ metadata.gz: 3e573247856ff0b1b989e0b9d0a2dfd978569c92
4
+ data.tar.gz: 1b7ca5892398cbf62054e76d85ff8bfcd0ebeb9d
5
5
  SHA512:
6
- metadata.gz: 0d8e13cf7f83e1581706c0013f03e46cdec97490c9d2a13345fca178212201570d6b7836772555d7b8cb8b6ed1a6051a4f41985fe01d0a066bd5218dcb02a79b
7
- data.tar.gz: 27f616dc7eab3d89a42faf45a48f3d2b9596ba43783855d19f8840b18675fa93ff8991961f15b735ec470423a8d3649a06b8c7e38c12e0227d2df711ed6bbeb6
6
+ metadata.gz: c91dbe33714e7024319967d498d809e7aa04a4108e18278652f4cdc0d6b2e9a30db47dd9bd4d6e2a04c51c4d625c6ce819c4da65d84d451c4cea6e53e75e56e6
7
+ data.tar.gz: 153deed61dd5f939736c4f9d51a30a9ceab806d7e5d6ebb7469c0b498c7e3e8b458df49a206e5363ca70e2d241724276fbfc6ca70082c0aded59f55e30a71de4
data/README.md CHANGED
@@ -25,6 +25,8 @@ end
25
25
 
26
26
  * `ParallelServer::Prefork.new(port, opts={})`
27
27
  * `ParallelServer::Prefork.new(host, port, opts={})`
28
+ * `ParallelServer::Prefork.new(socket, opts={})`
29
+ * `ParallelServer::Prefork.new([socket, ...], opts={})`
28
30
 
29
31
  #### host
30
32
 
@@ -33,6 +35,9 @@ end
33
35
  #### port
34
36
  待ち受けるTCPポート番号。
35
37
 
38
+ ### socket
39
+ 待ち受ける Socket オブジェクト。
40
+
36
41
  #### opts
37
42
 
38
43
  ParallelServer::Prefork の動作を設定するパラメータ。
@@ -13,8 +13,6 @@ module ParallelServer
13
13
  attr_reader :child_status
14
14
 
15
15
  # @!macro [new] args
16
- # @param host [String] hostname or IP address
17
- # @param port [Integer / String] port number / service name
18
16
  # @param opts [Hash] options
19
17
  # @option opts [Integer] :min_processes (5) minimum processes
20
18
  # @option opts [Integer] :max_processes (20) maximum processes
@@ -29,16 +27,24 @@ module ParallelServer
29
27
  # @option opts [#call] :on_child_exit (nil) object#call(pid, status) is invoked when child process exit. This is call in parent process.
30
28
 
31
29
  # @overload initialize(host=nil, port, opts={})
32
- # @!macro args
30
+ # @param host [String] hostname or IP address
31
+ # @param port [Integer / String] port number / service name
32
+ # @macro args
33
+ # @overload initialize(socket, opts={})
34
+ # @param socket [Socket] listening socket
35
+ # @macro args
36
+ # @overload initialize(sockets, opts={})
37
+ # @param sockets [Array<Socket>] listening sockets
38
+ # @macro args
33
39
  def initialize(*args)
34
- host, port, opts = parse_args(*args)
35
- @host, @port, @opts = host, port, opts
40
+ @sockets, @host, @port, @opts = parse_args(*args)
36
41
  set_variables_from_opts
37
42
  @from_child = {} # IO(r) => pid
38
43
  @to_child = {} # IO(r) => IO(w)
39
44
  @child_status = {} # IO(r) => Hash
40
45
  @children = [] # pid
41
46
  @loop = true
47
+ @sockets_created = false
42
48
  end
43
49
 
44
50
  # @return [void]
@@ -49,8 +55,11 @@ module ParallelServer
49
55
  def start(&block)
50
56
  raise 'block required' unless block
51
57
  @block = block
52
- @sockets = Socket.tcp_server_sockets(@host, @port)
53
- @sockets.each{|s| s.listen(@listen_backlog)} if @listen_backlog
58
+ unless @sockets
59
+ @sockets = Socket.tcp_server_sockets(@host, @port)
60
+ @sockets.each{|s| s.listen(@listen_backlog)} if @listen_backlog
61
+ @sockets_created = true
62
+ end
54
63
  @reload_args = nil
55
64
  while @loop
56
65
  do_reload if @reload_args
@@ -58,13 +67,21 @@ module ParallelServer
58
67
  adjust_children
59
68
  end
60
69
  ensure
61
- @sockets.each{|s| s.close rescue nil} if @sockets
70
+ @sockets.each{|s| s.close rescue nil} if @sockets && @sockets_created
62
71
  @to_child.values.each{|s| s.close rescue nil}
63
72
  @to_child.clear
64
73
  Timeout.timeout(1){wait_all_children} rescue Thread.new{wait_all_children}
65
74
  end
66
75
 
67
76
  # @overload reload(host=nil, port, opts={})
77
+ # @param host [String] hostname or IP address
78
+ # @param port [Integer / String] port number / service name
79
+ # @macro args
80
+ # @overload reload(socket, opts={})
81
+ # @param socket [Socket] listening socket
82
+ # @macro args
83
+ # @overload reload(sockets, opts={})
84
+ # @param sockets [Array<Socket>] listening sockets
68
85
  # @macro args
69
86
  # @return [void]
70
87
  def reload(*args)
@@ -86,20 +103,25 @@ module ParallelServer
86
103
 
87
104
  # @return [void]
88
105
  def do_reload
89
- host, port, @opts = @reload_args
106
+ sockets, host, port, @opts = @reload_args
90
107
  @reload_args = nil
91
108
  old_listen_backlog = @listen_backlog
92
109
  set_variables_from_opts
93
110
 
94
111
  address_changed = false
95
112
  if @host != host || @port != port
96
- @host, @port = host, port
97
- @sockets.each(&:close)
98
- @sockets = Socket.tcp_server_sockets(@host, @port)
99
- @sockets.each{|s| s.listen(@listen_backlog)} if @listen_backlog
113
+ @sockets.each(&:close) if @sockets_created
114
+ @sockets, @host, @port = sockets, host, port
115
+ if @sockets
116
+ @sockets_created = false
117
+ else
118
+ @sockets = Socket.tcp_server_sockets(@host, @port)
119
+ @sockets.each{|s| s.listen(@listen_backlog)} if @listen_backlog
120
+ @sockets_created = true
121
+ end
100
122
  address_changed = true
101
123
  elsif @listen_backlog != old_listen_backlog
102
- @sockets.each{|s| s.listen(@listen_backlog)} if @listen_backlog
124
+ @sockets.each{|s| s.listen(@listen_backlog)} if @listen_backlog && @sockets_created
103
125
  end
104
126
 
105
127
  reload_children(address_changed)
@@ -143,8 +165,17 @@ module ParallelServer
143
165
  end
144
166
 
145
167
  # @overload parse_args(host=nil, port, opts={})
168
+ # @param host [String] hostname or IP address
169
+ # @param port [Integer / String] port number / service name
146
170
  # @macro args
147
- # @return [Array<String, String, Hash>] hostname, port, option
171
+ # @overload parse_args(socket, opts={})
172
+ # @param socket [Socket] listening socket
173
+ # @macro args
174
+ # @overload parse_args(sockets, opts={})
175
+ # @param sockets [Array<Socket>] listening sockets
176
+ # @macro args
177
+ # @return [Array<Array<Socket>, String, String, Hash>] sockets, hostname, port, option.
178
+ # either sockets or (hostname & port) is available.
148
179
  def parse_args(*args)
149
180
  opts = {}
150
181
  arg_count = args.size
@@ -152,13 +183,18 @@ module ParallelServer
152
183
  opts = args.pop
153
184
  end
154
185
  if args.size == 1
155
- host, port = nil, args.first
186
+ case args.first
187
+ when Integer, String
188
+ host, port = nil, args.first
189
+ else
190
+ sockets = [args.first].flatten
191
+ end
156
192
  elsif args.size == 2
157
193
  host, port = args
158
194
  else
159
195
  raise ArgumentError, "wrong number of arguments (#{arg_count} for 1..3)"
160
196
  end
161
- return host, port, opts
197
+ return sockets, host, port, opts
162
198
  end
163
199
 
164
200
  # @return [Integer]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomita Masahiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-08 00:00:00.000000000 Z
11
+ date: 2015-05-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Parallel TCP Server library. This is easy to make Multi-Process / Multi-Thread
14
14
  server
@@ -45,3 +45,4 @@ signing_key:
45
45
  specification_version: 4
46
46
  summary: Parallel TCP Server library
47
47
  test_files: []
48
+ has_rdoc: true