code: @Override
      public CompletableFuture<Void> disconnect(Serializable userid, InetSocketAddress sncpAddr) {
          tryAcquireSemaphore();
          CompletableFuture<Void> future = sncpNodeAddresses.removeSetItemAsync(SOURCE_SNCP_USERID_PREFIX + userid, InetSocketAddress.class, sncpAddr);
          if (semaphore != null) future.whenComplete((r, e) -> releaseSemaphore());
          if (logger.isLoggable(Level.FINEST)) logger.finest(WebSocketNodeService.class.getSimpleName() + ".event: " + userid + " disconnect from " + sncpAddr);
          return future;
      }
docs: 当用户从一个节点断掉了所有的连接，需要从CacheSource中删除
  
  @param userid   Serializable
  @param sncpAddr InetSocketAddress
  
  @return 无返回值