Jelajahi Sumber

[perf] WebsocketLoadBalancer: check is_restricted_message once

...and filter clients early on.
Jakob Ackermann 6 tahun lalu
induk
melakukan
a70c1e1fa2

+ 8 - 3
services/real-time/app/coffee/WebsocketLoadBalancer.coffee

@@ -77,8 +77,15 @@ module.exports = WebsocketLoadBalancer =
 					status = EventLogger.checkEventOrder("editor-events", message._id, message)
 					if status is "duplicate"
 						return # skip duplicate events
+
+				is_restricted_message = message.message not in RESTRICTED_USER_MESSAGE_TYPE_PASS_LIST
+
 				# send messages only to unique clients (due to duplicate entries in io.sockets.clients)
 				clientList = io.sockets.clients(message.room_id)
+				.filter((client) ->
+					!(is_restricted_message && client.ol_context['is_restricted_user'])
+				)
+
 				# avoid unnecessary work if no clients are connected
 				return if clientList.length is 0
 				logger.log {
@@ -93,11 +100,9 @@ module.exports = WebsocketLoadBalancer =
 				Async.eachLimit clientList
 					, 2
 					, (client, cb) ->
-							is_restricted_user = client.ol_context['is_restricted_user']
 							if !seen[client.id]
 								seen[client.id] = true
-								if !(is_restricted_user && message.message not in RESTRICTED_USER_MESSAGE_TYPE_PASS_LIST)
-									client.emit(message.message, message.payload...)
+								client.emit(message.message, message.payload...)
 							cb()
 					, (err) ->
 						if err?