Ведь соединений может быть как 2 так и 1_000_000+, что уже будет плохо и перебор всех элементов такой Map на каждом создание сообщения будет не очень хорошо сказываться, а так же, в примере это групповой канал, который может содержать так же от до 2 до бесконечного числа пользователей.
как подобные сервизы хранят большие объёмы данных привязанные к единому элементу, например в канале находятся несколько сотен или даже тысяч пользователей
Какой в целом предпочтительный способ хранения подобного вида информацию
NAME:
ngrok - tunnel local ports to public URLs and inspect traffic
USAGE:
ngrok [command] [flags]
DESCRIPTION:
ngrok exposes local networked services behinds NATs and firewalls to the
public internet over a secure tunnel. Share local websites, build/test
webhook consumers and self-host personal services.
Detailed help for each command is available with 'ngrok help <command>'.
Open http://localhost:4040 for ngrok's web interface to inspect traffic.
Author:
ngrok - <support@ngrok.com>
TERMS OF SERVICE: https://ngrok.com/tos
EXAMPLES:
ngrok http 80 # secure public URL for port 80 web server
ngrok http --domain baz.ngrok.dev 8080 # port 8080 available at baz.ngrok.dev
ngrok http foo.dev:80 # tunnel to host:port instead of localhost
ngrok http https://localhost # expose a local https server
ngrok tcp 22 # tunnel arbitrary TCP traffic to port 22
ngrok tls --domain=foo.com 443 # TLS traffic for foo.com to port 443
ngrok start foo bar baz # start tunnels from the configuration file
COMMANDS:
api use ngrok agent as an api client
completion generates shell completion code for bash or zsh
config update or migrate ngrok's configuration file
credits prints author and licensing information
diagnose diagnose connection issues
help Help about any command
http start an HTTP tunnel
service run and control an ngrok service on a target operating system
start start tunnels by name from the configuration file
tcp start a TCP tunnel
tls start a TLS tunnel
tunnel start a tunnel for use with a tunnel-group backend
update update ngrok to the latest version
version print the version string
OPTIONS:
--config strings path to config files; they are merged if multiple
-h, --help help for ngrok
--metadata string opaque user-defined metadata for the tunnel session
-v, --version version for ngrok
неужели есть только один вариант это обрабатывать с поощью try/catch внутри каждого блока что бы избежать Unhandled exceptions?
private @NotNull Mono<JsonObject> invoke(Channel channel, Class<?> clazz, Method method, Object... args) {
return Mono.fromCallable(() -> clazz.getDeclaredConstructor(Server.class, Channel.class))
.map(constructor -> ex(() -> constructor.newInstance(this.manager.getServer(), channel)))
.flatMap(obj -> new GenericData<JsonObject>().invoke(method, obj, args))
.onErrorResume(Mono::error);
}
private <T> T ex(Callable<T> code) {
try {
return code.call();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private @NotNull Mono<JsonObject> invoke(Channel channel, Class<?> clazz, Method method, Object... args) {
return Mono.fromCallable(() -> {
var constructor = clazz.getDeclaredConstructor(Server.class, Channel.class);
return constructor.newInstance(this.manager.getServer(), channel);
})
.flatMap(obj -> new GenericData<JsonObject>().invoke(method, obj, args))
.onErrorResume(Mono::error);
}
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println(url.getFile());
}