parallel_server 0.1.4 → 0.1.5

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