49 lines
1.4 KiB
CoffeeScript
49 lines
1.4 KiB
CoffeeScript
config = require './config'
|
|
util = require 'util'
|
|
http = require 'http'
|
|
url = require 'url'
|
|
mongodb = require 'mongodb'
|
|
|
|
dbserver = new mongodb.Server(config.MONGODB_SOCKET, 0, {auto_reconnect: true})
|
|
db = new mongodb.Db(config.DATABASE_NAME, dbserver, {native_parser:true, safe:true})
|
|
|
|
cluster = require 'cluster'
|
|
numCPUs = require('os').cpus().length
|
|
|
|
if cluster.isMaster
|
|
cluster.on('listening', (worker, address) ->
|
|
util.log("Worker #{worker.process.pid} listening to #{address.address}:#{address.port}")
|
|
)
|
|
|
|
cluster.on('exit', (worker, code, signal) ->
|
|
util.log("Worker #{worker.process.pid} died (#{worker.process.exitCode})")
|
|
setTimeout(()->
|
|
cluster.fork()
|
|
, config.WORKER_RESPAWN_TIME)
|
|
)
|
|
|
|
for i in [1 .. numCPUs]
|
|
cluster.fork()
|
|
else
|
|
server = http.createServer((request, response) ->
|
|
urlParts = url.parse(request.url, true)
|
|
if request.method == 'GET'
|
|
request.addListener('end', () ->
|
|
gs = new mongodb.GridStore(db, urlParts.pathname, 'r', {})
|
|
gs.open((err, gs) ->
|
|
if err
|
|
response.writeHead(404)
|
|
response.end()
|
|
return
|
|
stream = gs.stream(true)
|
|
response.writeHead(200)
|
|
stream.pipe(response)
|
|
)
|
|
)
|
|
else
|
|
response.writeHead(405, {'Allow': 'GET'})
|
|
response.end('405 Method Not Allowed')
|
|
)
|
|
|
|
server.listen config.FILES_PORT, config.FILES_INTERFACE
|