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 +4 -4
- data/README.md +5 -0
- data/lib/parallel_server/prefork.rb +53 -17
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e573247856ff0b1b989e0b9d0a2dfd978569c92
|
4
|
+
data.tar.gz: 1b7ca5892398cbf62054e76d85ff8bfcd0ebeb9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
#
|
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
|
53
|
-
|
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
|
-
@
|
97
|
-
@sockets
|
98
|
-
@sockets
|
99
|
-
|
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
|
-
# @
|
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
|
-
|
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
|
+
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-
|
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
|