Просмотр исходного кода

Use new robust subscription model

James Allen 12 лет назад
Родитель
Сommit
d6532c63f8

+ 4 - 2
services/web/app/coffee/Features/Editor/EditorRealTimeController.coffee

@@ -1,7 +1,7 @@
 Settings = require 'settings-sharelatex'
 Settings = require 'settings-sharelatex'
 redis = require("redis-sharelatex")
 redis = require("redis-sharelatex")
 rclientPub = redis.createClient(Settings.redis.web)
 rclientPub = redis.createClient(Settings.redis.web)
-rclientSub = redis.createClient(Settings.redis.web)
+rclientSub = redis.createRobustSubscriptionClient(Settings.redis.web)
 
 
 module.exports = EditorRealTimeController =
 module.exports = EditorRealTimeController =
 	rclientPub: rclientPub
 	rclientPub: rclientPub
@@ -18,7 +18,9 @@ module.exports = EditorRealTimeController =
 
 
 	listenForEditorEvents: () ->
 	listenForEditorEvents: () ->
 		@rclientSub.subscribe "editor-events"
 		@rclientSub.subscribe "editor-events"
-		@rclientSub.on "message", @_processEditorEvent.bind(@)
+		@rclientSub.on "message", (channel, message) ->
+			return unless channel == "editor-events"
+			EditorRealTimeController._processEditorEvent(channel, message)
 
 
 	_processEditorEvent: (channel, message) ->
 	_processEditorEvent: (channel, message) ->
 		io = require('../../infrastructure/Server').io
 		io = require('../../infrastructure/Server').io

+ 5 - 2
services/web/app/coffee/Features/Editor/EditorUpdatesController.coffee

@@ -2,10 +2,11 @@ logger = require "logger-sharelatex"
 metrics = require('../../infrastructure/Metrics')
 metrics = require('../../infrastructure/Metrics')
 Settings = require 'settings-sharelatex'
 Settings = require 'settings-sharelatex'
 redis = require("redis-sharelatex")
 redis = require("redis-sharelatex")
-rclient = redis.createClient(Settings.redis.web)
 DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
 DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
 EditorRealTimeController = require("./EditorRealTimeController")
 EditorRealTimeController = require("./EditorRealTimeController")
 
 
+rclient = redis.createRobustSubscriptionClient(Settings.redis.web)
+
 module.exports = EditorUpdatesController =
 module.exports = EditorUpdatesController =
 	_applyUpdate: (client, project_id, doc_id, update, callback = (error) ->) ->
 	_applyUpdate: (client, project_id, doc_id, update, callback = (error) ->) ->
 		metrics.inc "editor.doc-update", 0.3
 		metrics.inc "editor.doc-update", 0.3
@@ -30,7 +31,9 @@ module.exports = EditorUpdatesController =
 		
 		
 	listenForUpdatesFromDocumentUpdater: () ->
 	listenForUpdatesFromDocumentUpdater: () ->
 		rclient.subscribe "applied-ops"
 		rclient.subscribe "applied-ops"
-		rclient.on "message", @_processMessageFromDocumentUpdater.bind(@)
+		rclient.on "message", (channel, message) ->
+			return unless channel == "applied-ops"
+			EditorUpdatesController._processMessageFromDocumentUpdater(channel, message)
 		
 		
 	_processMessageFromDocumentUpdater: (channel, message) ->
 	_processMessageFromDocumentUpdater: (channel, message) ->
 		message = JSON.parse message
 		message = JSON.parse message

+ 2 - 0
services/web/test/UnitTests/coffee/Editor/EditorRealTimeControllerTests.coffee

@@ -9,6 +9,8 @@ describe "EditorRealTimeController", ->
 			"redis-sharelatex": 
 			"redis-sharelatex": 
 				createClient: () ->
 				createClient: () ->
 					auth:->
 					auth:->
+				createRobustSubscriptionClient: () ->
+					auth:->
 			"../../infrastructure/Server" : io: @io = {}
 			"../../infrastructure/Server" : io: @io = {}
 		@EditorRealTimeController.rclientPub = publish: sinon.stub()
 		@EditorRealTimeController.rclientPub = publish: sinon.stub()
 		@EditorRealTimeController.rclientSub =
 		@EditorRealTimeController.rclientSub =

+ 1 - 1
services/web/test/UnitTests/coffee/Editor/EditorUpdatesControllerTests.coffee

@@ -18,7 +18,7 @@ describe "EditorUpdatesController", ->
 			"../../infrastructure/Metrics" : @metrics = { set: sinon.stub(), inc: sinon.stub() }
 			"../../infrastructure/Metrics" : @metrics = { set: sinon.stub(), inc: sinon.stub() }
 			"../../infrastructure/Server" : io: @io = {}
 			"../../infrastructure/Server" : io: @io = {}
 			"redis-sharelatex" : 
 			"redis-sharelatex" : 
-				createClient: ()=> 
+				createRobustSubscriptionClient: ()=> 
 					@rclient = {auth:->}
 					@rclient = {auth:->}
 
 
 	describe "_applyUpdate", ->
 	describe "_applyUpdate", ->