This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

FAQ Что такое rage-rpc и почему это лучше?

Mercury_One

Специалист
Автор темы
high coder
11 Фев 2021
37
22
82
Здравствуйте, пишу первый раз на этом форуме, так что не бейте)

P.S. Эта статья предназначена для скриптеров, которые пишут или хотят начать писать на JS (клиент и сервер).

Для начала, RPC (Remote Procedure Calls) упрощает двустороннюю связь между сервером, клиентом и cef. Фактически эта библиотека строится на стандартом RAGE API отправки пакетов с сервера на клиент и обратно, но с значительными преимуществами в виде удобства и оптимизации вашего кода.

Приведу небольшой практический пример: Допустиму нас есть CEF - меню фракции, в нём есть какая-то кнопка, действие которой нужно обработать на сервере.

Как эту задачу мы бы реализовали с помощью RAGE API:

CEF:
JavaScript:
$("#quit-fraction").click(function() {
    // тело
    mp.trigger("playerQuitFraction");
});

Клиент:
JavaScript:
mp.events.add("playerQuitFraction", () => {
    mp.events.callRemote("remotePlayerQuitFraction");
});

Сервер:
JavaScript:
mp.events.add("remotePlayerQuitFraction", (player) => {
    // и уже тут что-то делаем с player'ом
});

Как эту задачу мы бы реализовали с помощью rage-rpc:

CEF:
JavaScript:
$("#quit-fraction").click(function() {
    // тело
    rpc.callServer("playerQuitFraction");
});

Сервер:
JavaScript:
rpc.register("playerQuitFraction", (data, info) => {
    let player = info.player;
    // и уже тут что-то делаем с player'ом
});

Rage-rpc работает и в обратную сторону, с сервера в cef.

Мы пропустили посредника, а именно клиент. Может показаться, что не сильно сложно написать пару строк на клиенте, но вы только представьте, что происходит если вам надо создать кучу обработчиков действий из cef.

Проблему захламлённости кода клиента ненужными ивентами (посредниками) между CEF - Сервером и решает rage-rpc. Но это только начало. Функционал rage-rpc достаточно обилен.

Представим ситуацию: Мы хотим узнать на сервере поднимается ли по лестнице игрок в данный момент. Говорить о реализации через RAGE API, тут даже не стоит.

Реализация, через rage-rpc:

Сервер:
JavaScript:
const isClimbing = await rpc.callClient(player, 'getIsClimbing');

if (isClimbing) {
    console.log(player.name + " поднимается.");
} else {
    console.log(player.name + " не поднимается.");
}

Клиент:
JavaScript:
rpc.register('getIsClimbing', () => mp.players.local.isClimbing());

Абсолютно ничего лишнего, всё просто и удобно.

Если вас заинтересовал rage-rpc, вот соурс: https://github.com/micaww/rage-rpc
Там же более подробно рассказано о всех функциях данной библиотеки, о установке и т.п.

Так же если будут какие-то вопросы, задавайте в комментарии, работаю с этой библиотекой уже 3 месяца.
 

челавек паук

Специалист
7 Ноя 2020
158
43
95
Круто) Подробно описано. Опробую!
 

filecore

Специалист
high coder
6 Окт 2020
227
87
82
На самом деле посредника мы не лишается, если открыть клиентскую библиотеку rpc то мы увидим унификацию callremote и цеф общается цеф-рпс клиент - рпс сервер - рейдж сервер и в обратном порядке
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
584
276
161
29
дядь В теме об этом и говорится
 

artemsiberian

Начинающий специалист
22 Май 2021
59
12
50
Последний коммит 1.5 года назад по либе, рейдж обновят там что нибудь потом во фрейморке ковырятся
 

Mercury_One

Специалист
Автор темы
high coder
11 Фев 2021
37
22
82
Не понимаю смысла разводить тут дискуссии, это просто статья, хотите используйте, хотите нет. И я лично не понимаю, зачем что-то обновлять если оно и так идеально работает.
Так же думаю, что создатель rage mp, не будет менять систему/API связи сервер - клиент, потому что возможно многие сервера выпадут, вероятно он сам знает о rage-rpc.
 
Последнее редактирование:
Реакции: Harland David Sanders

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
584
276
161
29
По этой логике проще писать на чистом JS не используя ничего. Долой jquery! Долой VUE! Долой REACT!
И разница в том что своё пишешь ты, а чужой пишешь не ты...
 

artemsiberian

Начинающий специалист
22 Май 2021
59
12
50
ну ты сравнил, конечно, жопу с пальцем)))
вью с реактом и хер пойми какой реп двух летний
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
584
276
161
29
Я ничего не сравнивал) Пытаюсь понять твою логику. Есть либа, которой можно воспользоваться. хочешь берешь и используешь. Не хочешь, не используешь. Либа построена на фундаментальных API которые врятли будут изменять. "Обновлять то что по сути не нужно обновлять..."
 

artemsiberian

Начинающий специалист
22 Май 2021
59
12
50
Сейчас объясню логику у ламбы и у жигули, фундаментально все одинаково, 4 колеса, и та и та свои функции выполняет, умеет двигаться из точки а в точку Б, но есть некоторые минимальные отличия, у каждого они свои, это от запросов и потребностей зависит, так и тут, хочешь берешь и используешь. Не хочешь, не используешь
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
584
276
161
29
Странное сравнение) Получается тут тебе подгоняют ламбу, ты такой, неее я буду гонять на своем жигуле...
 
Реакции: artemsiberian

Brabus7

Активный участник
14 Окт 2021
29
6
40
Кто попробует взять код из примера, ждите ошибку, await работает только внутри функции async
 

Brabus7

Активный участник
14 Окт 2021
29
6
40
Так работает JS. async/await это просто синтаксический сахар над Promise
Для меня как новичка в этом деле не понятен этот сахар.
Надо указать что пример для тех кто умеет работать с этим и смог бы разобраться сам, получается смысла этой темы нет. Так как понять как оно работает можно на примерах которые опять таки требуют знаний....
 

Anatolii

Активный участник
12 Окт 2021
3
0
38
Вот неплохой сайт https://learn.javascript.ru/ Пройди его по порядку, прорешай примеры, и всё станет понятно.

Спасибо автору за тему! Отличная либа.
 

aspidemon

Активный участник
26 Сен 2022
116
42
40
Было бы круто, если либа давала небольшую защиту от executor и подобных читов..