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

Вопрос Как работает сам RAGE:MP

if-not-skill

Новый участник
22 Июл 2023
7
1
8
Сейчас раскрою вопрос. Как выглядит использование моей серверной dll на c#? Скажем при запросе от пользователя, создается новый handler? или же есть лишь один instance моей серверной логики, и мне нужно будет параллелить самому? Извиняюсь за вопрос, если где-то эта тема раскрыта, хотел бы глянуть.
 

Inoi

owner31
Команда форума
Moderator
VIP
15 Окт 2020
5,421
2,874
208
37
нихуя не понял как будто бы вопроса нормально, но
каждый клиентский запрос обрабатывается с помощью своего собственного экземпляра обработчика, для каждого клиента он свой, так работает ооп
рейдж или что-то ещё тут в целом не при чём

попробуй пример привести, что ты имеешь ввиду
 
Реакции: if-not-skill

mippoosedev

Мастер
BackEnd developer
2 Мар 2021
304
152
100
Если твой класс наследован от Script - создается 1 экземпляр, всё остальное работает так - как ты заставишь это работать.
 
Реакции: if-not-skill

if-not-skill

Новый участник
22 Июл 2023
7
1
8
ООП тут как мне кажется не причем. В рамках ооп оно могло бы работать как угодно. Я просто хотел узнать, если я буду что-то долгое делать в обработчике, то скажется ли это на обработку других пользователей. Но ты в целом ответил на мой вопрос.
Спасибо
 

mippoosedev

Мастер
BackEnd developer
2 Мар 2021
304
152
100
В таком случае вопрос не в "обработчике"(по идее это объект, экземпляр класса, но пусть будет обработчик) а в потоках. Если ты заблочишь главный поток на N кол-во операций - то офк будет небольшая задержка. Если это запрос в бд/сторонний сервис выноси это в асинхронные таски
 

if-not-skill

Новый участник
22 Июл 2023
7
1
8
То есть я правильно понимаю, что выполнение RemoveEvent'а например будет происходить в главном потоке?
 

if-not-skill

Новый участник
22 Июл 2023
7
1
8
Аааа. Я не так прочитал с первого раза. Сейчас возникли вопросы. То есть создается один, вообще? Как синглтон? Или один на каждого клиента как выразился Inoi?
 

mippoosedev

Мастер
BackEnd developer
2 Мар 2021
304
152
100
Один, если ты хочешь получить доступ с другого объекта - сделай автосвойство Instance и в пустом конструкторе присвой Instance = this. Те самые цветные надписи при старте сервера - это и есть инициализация классов, наследуемых от script + парсинг всех евентов и команд
 

mippoosedev

Мастер
BackEnd developer
2 Мар 2021
304
152
100
Вызов метода с атрибутом RemoteEvent - да, 99.999% из главного потока. А вот то, как он будет работать внутри - это уже другой вопрос. Рейдж имеет удивительное свойство. Даже если ты не создаешь явно новые потоки - при использовании асинхронной таски, прямо во время таски он может "перейти в другой поток". Собственно если включить api-thread-debugging, то ты увидишь варнинг посреди таски. Это достаточно странно, ведь асинхронные таски под капотом это можно сказать корутина, и без дополнительных потоков в тредпуле они не должны туда перескакивать, но у рейджа другие планы, либо я не до конца понимаю этот момент(как он работает под капотом). В любом случае, проблема асинхронных скачков по потокам решается так же, как и в любом .net приложении, либо же можно вызывать NAPI.Task.WaitForMainThread() после какого либо await (например запрос в стороннюю api)