Помогите Общение Spigot-Bungee без задержки

Абсик

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Abcik
Добрый день. Хочу узнать способы передачи данных между сервером и прокси с минимальными задержками. Пробовал использовать стандартный метод общения - BungeeChannels, но как выяснилось он имеет задержку в ~50мс. Также я не уверен, что при огромном потоке информации всё будет хорошо, поэтому пытаюсь найти альтернативный способ который будет быстрее и надёжнее.
Погуглив нашел какие-то сокеты, но не особо понял что это и с чем едят. Если это то, что мне действительно нужно - посоветуйте годный, желательно русский гайд на эту тему.

Если это имеет значение - прокси и сервера находятся на одной машине.
 
Нулевой задержки априори не добиться, и неуверен, что получится добиться скорости действительно быстрее. Здесь довольно краткий, но понятный экскурс по сокетам с примерами.
 
Нулевой пинг может быть только в локальной сети где сервера рядом. А при большом потоке ляжет любой сокет, нужно оптимизировать размер передаваемой информации.
 
Нулевой пинг может быть только в локальной сети где сервера рядом. А при большом потоке ляжет любой сокет, нужно оптимизировать размер передаваемой информации.
В том то и дело, что даже на локалке ответ приходится ждать 50мс.
 
Если кому интересно - разобрался с сокетами и провёл повторные тесты:
BungeeCord PluginMessagingChannel среднее время ожидания ответа - 50мс.
В то время, как на сокетах, в тех же условиях ожидание ответа не превышает 3мс, а в среднем составляет всего 1мс.

Но хотел бы ещё убедиться, что осуществил сокетное общение правильно...
У меня получилось так, что на каждом сервере будет свой приёмник(От прокси, порт X) и свой отправитель(Для прокси, порт Y), также как и на прокси будет свой приёмник(От спигота, порт Y) и свой отправитель(Для спигота, порт X). Я же всё правильно понял, нужно 2 сервера и два клиента, чтобы передавать данные в обе стороны?
 
Но хотел бы ещё убедиться, что осуществил сокетное общение правильно...
У меня получилось так, что на каждом сервере будет свой приёмник(От прокси, порт X) и свой отправитель(Для прокси, порт Y), также как и на прокси будет свой приёмник(От спигота, порт Y) и свой отправитель(Для спигота, порт X). Я же всё правильно понял, нужно 2 сервера и два клиента, чтобы передавать данные в обе стороны?
После подключения клиента к серверу они могут продолжать общаться. В примере крестиков-ноликов из упомянутого ранее мини-гайда это видно - сервер отправляет сообщение о победе или поражении обоим клиентам.
 
Если кому интересно - разобрался с сокетами и провёл повторные тесты:
BungeeCord PluginMessagingChannel среднее время ожидания ответа - 50мс.
В то время, как на сокетах, в тех же условиях ожидание ответа не превышает 3мс, а в среднем составляет всего 1мс.

Но хотел бы ещё убедиться, что осуществил сокетное общение правильно...
У меня получилось так, что на каждом сервере будет свой приёмник(От прокси, порт X) и свой отправитель(Для прокси, порт Y), также как и на прокси будет свой приёмник(От спигота, порт Y) и свой отправитель(Для спигота, порт X). Я же всё правильно понял, нужно 2 сервера и два клиента, чтобы передавать данные в обе стороны?
Как уже писалось выше - достаточно одного сервера. Сервер может в любой момент отправлять данные клиентам, а клиенты серверу. Но, само собой, принятие и отправка информации должны работать в разных потоках. Поэтому на клиент + сервер нужно уже условно 4 потока. Конечно, можно использовать воркер.

Но, вообще, если интересно развиваться в этой теме - рекомендую ознакомиться с библиотекой Netty
 
Последнее редактирование:
Вот поэтому существуют брокеры сообщений. Потому не надо изобретать велосипед, берёшь брокера сообщений (redis, zeromq, и т.д.) и пилишь что надо.
 
Назад
Верх