47
47
import logging
48
48
import getopt
49
49
import encrypt
50
+ import os
50
51
import utils
51
52
import udprelay
52
53
@@ -176,7 +177,7 @@ def main():
176
177
config_path = utils .find_config ()
177
178
try :
178
179
optlist , args = getopt .getopt (sys .argv [1 :], 's:p:k:m:c:' ,
179
- ['fast-open' ])
180
+ ['fast-open' , 'workers:' ])
180
181
for key , value in optlist :
181
182
if key == '-c' :
182
183
config_path = value
@@ -194,7 +195,7 @@ def main():
194
195
config = {}
195
196
196
197
optlist , args = getopt .getopt (sys .argv [1 :], 's:p:k:m:c:' ,
197
- ['fast-open' ])
198
+ ['fast-open' , 'workers=' ])
198
199
for key , value in optlist :
199
200
if key == '-p' :
200
201
config ['server_port' ] = int (value )
@@ -206,6 +207,8 @@ def main():
206
207
config ['method' ] = value
207
208
elif key == '--fast-open' :
208
209
config ['fast_open' ] = True
210
+ elif key == '--workers' :
211
+ config ['workers' ] = value
209
212
except getopt .GetoptError :
210
213
utils .print_server_help ()
211
214
sys .exit (2 )
@@ -217,6 +220,7 @@ def main():
217
220
config_port_password = config .get ('port_password' , None )
218
221
config_timeout = config .get ('timeout' , 600 )
219
222
config_fast_open = config .get ('fast_open' , False )
223
+ config_workers = config .get ('workers' , 1 )
220
224
221
225
if not config_key and not config_path :
222
226
sys .exit ('config not specified, please read '
@@ -249,6 +253,17 @@ def main():
249
253
udprelay .UDPRelay (config_server , int (port ), None , None , key ,
250
254
config_method , int (config_timeout ), False ).start ()
251
255
256
+ if int (config_workers ) > 1 :
257
+ if os .name == 'posix' :
258
+ # TODO only serve in workers, not in master
259
+ for i in xrange (0 , int (config_workers ) - 1 ):
260
+ r = os .fork ()
261
+ if r == 0 :
262
+ break
263
+ else :
264
+ logging .warn ('worker is only available on Unix/Linux' )
265
+
266
+
252
267
253
268
if __name__ == '__main__' :
254
269
try :
0 commit comments