docs: public void accept(String key, $.Function<WebSocketConnection, ?> visitor) {
          ConcurrentMap<WebSocketConnection, WebSocketConnection> connections = registry.get(key);
          if (null == connections) {
              return;
          }
          if (!connections.isEmpty()) {
              lock.lock();
              try {
                  List<WebSocketConnection> toBeCleared = null;
                  for (WebSocketConnection conn : connections.keySet()) {
                      if (conn.closed()) {
                          if (null == toBeCleared) {
                              toBeCleared = new ArrayList<>();
                          }
                          toBeCleared.add(conn);
                          continue;
                      }
                      visitor.apply(conn);
                  }
                  if (null != toBeCleared) {
                      ConcurrentMap<WebSocketConnection, WebSocketConnection> originalCopy = registry.get(key);
                      originalCopy.keySet().removeAll(toBeCleared);
                  }
              } finally {
                  lock.unlock();
              }
          }
      }