app.coffee 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. express = require("express")
  2. session = require("express-session")
  3. redis = require("redis-sharelatex")
  4. RedisStore = require('connect-redis')(session)
  5. SessionSockets = require('session.socket.io')
  6. CookieParser = require("cookie-parser")
  7. Settings = require "settings-sharelatex"
  8. logger = require "logger-sharelatex"
  9. logger.initialize("real-time-sharelatex")
  10. Metrics = require("metrics-sharelatex")
  11. Metrics.initialize("real-time")
  12. rclient = redis.createClient(Settings.redis.web)
  13. # Set up socket.io server
  14. app = express()
  15. server = require('http').createServer(app)
  16. io = require('socket.io').listen(server)
  17. # Bind to sessions
  18. sessionStore = new RedisStore(client: rclient)
  19. cookieParser = CookieParser(Settings.security.sessionSecret)
  20. sessionSockets = new SessionSockets(io, sessionStore, cookieParser, Settings.cookieName)
  21. io.configure ->
  22. io.enable('browser client minification')
  23. io.enable('browser client etag')
  24. # Fix for Safari 5 error of "Error during WebSocket handshake: location mismatch"
  25. # See http://answers.dotcloud.com/question/578/problem-with-websocket-over-ssl-in-safari-with
  26. io.set('match origin protocol', true)
  27. # gzip uses a Node 0.8.x method of calling the gzip program which
  28. # doesn't work with 0.6.x
  29. #io.enable('browser client gzip')
  30. io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'])
  31. io.set('log level', 1)
  32. Router = require "./app/js/Router"
  33. Router.configure(app, io, sessionSockets)
  34. WebsocketLoadBalancer = require "./app/js/WebsocketLoadBalancer"
  35. WebsocketLoadBalancer.listenForEditorEvents(io)
  36. port = Settings.internal.realTime.port
  37. host = Settings.internal.realTime.host
  38. server.listen port, host, (error) ->
  39. throw error if error?
  40. logger.log "real-time-sharelatex listening on #{host}:#{port}"