| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- logger = require "logger-sharelatex"
- logger.initialize("real-time-sharelatex")
- express = require("express")
- session = require("express-session")
- redis = require("redis-sharelatex")
- ioredis = require('ioredis')
- Settings = require "settings-sharelatex"
- redisSessionsSettings = Settings.redis.websessions or Settings.redis.web
- if redisSessionsSettings?.cluster?
- logger.log {}, "using redis cluster for web sessions"
- sessionRedisClient = new ioredis.Cluster(redisSessionsSettings.cluster)
- else
- sessionRedisClient = redis.createClient(redisSessionsSettings)
- RedisStore = require('connect-redis')(session)
- SessionSockets = require('session.socket.io')
- CookieParser = require("cookie-parser")
- Metrics = require("metrics-sharelatex")
- Metrics.initialize(Settings.appName or "real-time")
- Metrics.event_loop.monitor(logger)
- # Set up socket.io server
- app = express()
- server = require('http').createServer(app)
- io = require('socket.io').listen(server)
- # Bind to sessions
- sessionStore = new RedisStore(client: sessionRedisClient)
- cookieParser = CookieParser(Settings.security.sessionSecret)
- sessionSockets = new SessionSockets(io, sessionStore, cookieParser, Settings.cookieName)
- io.configure ->
- io.enable('browser client minification')
- io.enable('browser client etag')
- # Fix for Safari 5 error of "Error during WebSocket handshake: location mismatch"
- # See http://answers.dotcloud.com/question/578/problem-with-websocket-over-ssl-in-safari-with
- io.set('match origin protocol', true)
- # gzip uses a Node 0.8.x method of calling the gzip program which
- # doesn't work with 0.6.x
- #io.enable('browser client gzip')
- io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'])
- io.set('log level', 1)
- app.get "/status", (req, res, next) ->
- res.send "real-time-sharelatex is alive"
- redisCheck = redis.activeHealthCheckRedis(Settings.redis.web)
- app.get "/health_check/redis", (req, res, next) ->
- if redisCheck.isAlive()
- res.send 200
- else
- res.send 500
- Router = require "./app/js/Router"
- Router.configure(app, io, sessionSockets)
- WebsocketLoadBalancer = require "./app/js/WebsocketLoadBalancer"
- WebsocketLoadBalancer.listenForEditorEvents(io)
- DocumentUpdaterController = require "./app/js/DocumentUpdaterController"
- DocumentUpdaterController.listenForUpdatesFromDocumentUpdater(io)
- port = Settings.internal.realTime.port
- host = Settings.internal.realTime.host
- server.listen port, host, (error) ->
- throw error if error?
- logger.info "realtime starting up, listening on #{host}:#{port}"
- # Stop huge stack traces in logs from all the socket.io parsing steps.
- Error.stackTraceLimit = 10
|