From a70c1e1fa2aa3e607f997f711b5f9893266f49b6 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 24 Feb 2020 14:39:34 +0100 Subject: [PATCH] [perf] WebsocketLoadBalancer: check is_restricted_message once ...and filter clients early on. --- .../real-time/app/coffee/WebsocketLoadBalancer.coffee | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee index 5a59ea504f..17de2df2b6 100644 --- a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee +++ b/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?