@eleven-am/pondsocket 0.1.181 → 0.1.183

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,7 +33,7 @@ var __rest = (this && this.__rest) || function (s, e) {
33
33
  var __importDefault = (this && this.__importDefault) || function (mod) {
34
34
  return (mod && mod.__esModule) ? mod : { "default": mod };
35
35
  };
36
- var _RedisClient_instances, _RedisClient_heartbeatInterval, _RedisClient_cleanupInterval, _RedisClient_instanceTtl, _RedisClient_redisClient, _RedisClient_pubClient, _RedisClient_subClient, _RedisClient_instanceId, _RedisClient_assignsPublisher, _RedisClient_presencePublisher, _RedisClient_userLeavesPublisher, _RedisClient_channelMessagePublisher, _RedisClient_stateSyncPublisher, _RedisClient_heartbeatTimer, _RedisClient_cleanupTimer, _RedisClient_presence_changes_channel_get, _RedisClient_assigns_changes_channel_get, _RedisClient_channel_messages_channel_get, _RedisClient_user_leaves_channel_get, _RedisClient_cleanup, _RedisClient_handleErrors, _RedisClient_getPresenceCacheChannel, _RedisClient_getAssignsCacheChannel, _RedisClient_publishPresenceChange, _RedisClient_publishAssignsChange, _RedisClient_publishChannelMessage, _RedisClient_publishUserLeave, _RedisClient_registerInstance, _RedisClient_unregisterInstance, _RedisClient_unsubscribeFromChannels, _RedisClient_subscribeToChannels, _RedisClient_startHeartbeat, _RedisClient_startPeriodicCleanup, _RedisClient_performConsistencyCheck, _RedisClient_handleRedisMessage, _RedisClient_publishCacheMessage, _RedisClient_emitStateSyncEvent, _RedisClient_subscribeToCacheChanges, _RedisClient_subscribeToChannelMessages, _RedisClient_subscribeToUserLeaves, _RedisClient_subscribeToStateSync, _RedisClient_handleExit;
36
+ var _RedisClient_instances, _RedisClient_heartbeatInterval, _RedisClient_cleanupInterval, _RedisClient_instanceTtl, _RedisClient_redisClient, _RedisClient_pubClient, _RedisClient_subClient, _RedisClient_instanceId, _RedisClient_assignsPublisher, _RedisClient_presencePublisher, _RedisClient_userLeavesPublisher, _RedisClient_channelMessagePublisher, _RedisClient_stateSyncPublisher, _RedisClient_heartbeatTimer, _RedisClient_cleanupTimer, _RedisClient_presence_changes_channel_get, _RedisClient_assigns_changes_channel_get, _RedisClient_channel_messages_channel_get, _RedisClient_user_leaves_channel_get, _RedisClient_handleErrors, _RedisClient_getPresenceCacheChannel, _RedisClient_getAssignsCacheChannel, _RedisClient_publishPresenceChange, _RedisClient_publishAssignsChange, _RedisClient_publishChannelMessage, _RedisClient_publishUserLeave, _RedisClient_registerInstance, _RedisClient_unregisterInstance, _RedisClient_unsubscribeFromChannels, _RedisClient_subscribeToChannels, _RedisClient_startHeartbeat, _RedisClient_startPeriodicCleanup, _RedisClient_performConsistencyCheck, _RedisClient_handleRedisMessage, _RedisClient_publishCacheMessage, _RedisClient_emitStateSyncEvent, _RedisClient_subscribeToCacheChanges, _RedisClient_subscribeToChannelMessages, _RedisClient_subscribeToUserLeaves, _RedisClient_subscribeToStateSync, _RedisClient_handleExit, _RedisClient_deleteKeysByPattern;
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.RedisClient = void 0;
39
39
  const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
@@ -97,11 +97,12 @@ class RedisClient {
97
97
  }
98
98
  shutdown() {
99
99
  return __awaiter(this, void 0, void 0, function* () {
100
+ const batchSize = 1000;
100
101
  clearInterval(__classPrivateFieldGet(this, _RedisClient_heartbeatTimer, "f"));
101
102
  clearInterval(__classPrivateFieldGet(this, _RedisClient_cleanupTimer, "f"));
102
103
  yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_unsubscribeFromChannels).call(this);
103
104
  yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_unregisterInstance).call(this);
104
- yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_cleanup).call(this);
105
+ yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_deleteKeysByPattern).call(this, `*_cache:${__classPrivateFieldGet(this, _RedisClient_instanceId, "f")}:*`, batchSize);
105
106
  });
106
107
  }
107
108
  }
@@ -114,15 +115,6 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
114
115
  return 'channel_messages';
115
116
  }, _RedisClient_user_leaves_channel_get = function _RedisClient_user_leaves_channel_get() {
116
117
  return 'user_leaves';
117
- }, _RedisClient_cleanup = function _RedisClient_cleanup() {
118
- return __awaiter(this, void 0, void 0, function* () {
119
- const pipeline = __classPrivateFieldGet(this, _RedisClient_redisClient, "f").pipeline();
120
- const presenceKeys = yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").keys('presence_cache:*');
121
- presenceKeys.forEach((key) => pipeline.del(key));
122
- const assignsKeys = yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").keys('assigns_cache:*');
123
- assignsKeys.forEach((key) => pipeline.del(key));
124
- yield pipeline.exec();
125
- });
126
118
  }, _RedisClient_handleErrors = function _RedisClient_handleErrors() {
127
119
  __classPrivateFieldGet(this, _RedisClient_redisClient, "f").on('error', (err) => console.error('Redis client error:', err));
128
120
  __classPrivateFieldGet(this, _RedisClient_pubClient, "f").on('error', (err) => console.error('Redis pub client error:', err));
@@ -235,6 +227,11 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
235
227
  local inactive_keys = {}
236
228
  local unique_pairs = {}
237
229
 
230
+ local active_set = {}
231
+ for _, instance in ipairs(active_instances) do
232
+ active_set[instance] = true
233
+ end
234
+
238
235
  for _, key in ipairs(all_keys) do
239
236
  local parts = {}
240
237
  for part in string.gmatch(key, '[^:]+') do
@@ -242,7 +239,7 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
242
239
  end
243
240
  local instance_id, endpoint_id, channel_id = parts[2], parts[3], parts[4]
244
241
 
245
- if not (active_instances[instance_id]) then
242
+ if not active_set[instance_id] then
246
243
  table.insert(inactive_keys, key)
247
244
  local pair = endpoint_id .. ':' .. channel_id
248
245
  unique_pairs[pair] = true
@@ -384,4 +381,15 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
384
381
  process.exit(1);
385
382
  }
386
383
  });
384
+ }, _RedisClient_deleteKeysByPattern = function _RedisClient_deleteKeysByPattern(pattern, batchSize) {
385
+ return __awaiter(this, void 0, void 0, function* () {
386
+ let cursor = '0';
387
+ do {
388
+ const [newCursor, keys] = yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").scan(cursor, 'MATCH', pattern, 'COUNT', batchSize);
389
+ cursor = newCursor;
390
+ if (keys.length > 0) {
391
+ yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").del(...keys);
392
+ }
393
+ } while (cursor !== '0');
394
+ });
387
395
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eleven-am/pondsocket",
3
- "version": "0.1.181",
3
+ "version": "0.1.183",
4
4
  "description": "PondSocket is a fast simple socket server",
5
5
  "keywords": [
6
6
  "socket",